2014-10-04 10 views
17

मैं एएसपीनेट सीखने की कोशिश कर रहा हूं और अब तक मैं Ajax.Actionlink और AjaxOptions() का उपयोग करके रीफ्रेश किए बिना अन्य पेज सामग्री लोड कर सकता हूं लेकिन मुझे यह पता नहीं लगा सकता कि AJAX का उपयोग कैसे करें एक फॉर्म जमा करना मैंने बहुत सारे गुगल किए लेकिन उचित समाधान नहीं मिला। यहाँ मेरी कोड,एएसएक्स का उपयोग करके एएसएक्स का उपयोग करके फॉर्म सबमिट करें। एमवीसी 4

नियंत्रक पेज हैं

namespace CrudMvc.Controllers 
{ 
public class HomeController : Controller 
{ 
    sampleDBEntities db = new sampleDBEntities(); 
    // 
    // GET: /Home/ 

    public ActionResult Index() 
    { 
     return View(db.myTables.ToList()); 
    } 

    public PartialViewResult Details(int id = 0) 
    { 
     myTable Table = db.myTables.Find(id); 
     return PartialView(Table); 
    } 

    [HttpGet] 
    public PartialViewResult Create() 
    { 
     return PartialView(); 
    } 

    [HttpPost] 
    public ActionResult Create(myTable table) 
    { 
     if (ModelState.IsValid) 
     { 
      db.myTables.Add(table); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(table); 
    } 

    protected override void Dispose(bool disposing) 
    { 
     db.Dispose(); 
     base.Dispose(disposing); 
    } 
} 
} 

Index देखें पेज

@model IEnumerable<CrudMvc.Models.myTable> 

@{ 
ViewBag.Title = "Index"; 
Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<script src="~/Scripts/jquery-1.7.1.min.js"></script> 
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> 

<h2>Index</h2> 

<p> 
@Ajax.ActionLink("Add New", "Create", new AjaxOptions() 
    { 
    HttpMethod = "GET", 
    UpdateTargetId = "info", 
    InsertionMode = InsertionMode.Replace 
    }) 
</p> 
<div id="main"> 
<table> 
<tr> 
    <th> 
     @Html.DisplayNameFor(model => model.name) 
    </th> 
    <th>Action</th> 
</tr> 

@foreach (var item in Model) { 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.name) 
    </td> 
    <td> 
     @Ajax.ActionLink("Details", "Details", new{ id=item.id}, new AjaxOptions() 
    { 
    HttpMethod = "GET", 
    UpdateTargetId = "info", 
    InsertionMode = InsertionMode.Replace 
    }) 
    </td> 
</tr> 
} 
</table> 
</div> 
<div id="info"></div> 

Create पृष्ठ दृश्य

@model CrudMvc.Models.myTable 

@{ 
ViewBag.Title = "Create"; 
Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Create</h2> 

@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 

<fieldset> 
    <legend>myTable</legend> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.id) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.id) 
     @Html.ValidationMessageFor(model => model.id) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.name) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.name) 
     @Html.ValidationMessageFor(model => model.name) 
    </div> 
    <p> 
     <input type="submit" value="Create" /> 
    </p> 
</fieldset> 
} 

<script> 
var form = $('#main'); 
$.ajax({ 
    cache: false, 
    async: true, 
    type: "POST", 
    url: form.attr('action'), 
    data: form.serialize(), 
    success: function (data) { 
     alert(data); 
    } 
}); 
</script> 

<div> 
@Html.ActionLink("Back to List", "Index") 
</div> 

@section Scripts { 
@Scripts.Render("~/bundles/jqueryval") 
} 
+1

कुछ लेख 'Html.BeginForm() '[Html.BeginForm() बनाम Ajax.BeginForm() एमवीसी 3 में उपयोग दिखा रहे हैं] (http://www.codeproject.com/Articles/429164/Html-BeginForm-vs-Ajax -शुरू फॉर्म-इन-एमवीसी) और [एएसपी.नेट एमवीसी के साथ अजाक्स.बीजिनफॉर्म() का उपयोग करना] (http://www.blackbeltcoder.com/Articles/script/using-ajax-beginform-with-asp-net-mvc) –

उत्तर

61

यहाँ पूर्ण उदाहरण चला जाता है -

public class Details 
{ 
    public string Name { get; set; } 
    public string Email { get; set; } 
} 

अभी सेवा का उपयोग AJAX BEGINFORM प्राप्त और पोस्ट अनुरोध बनाने के लिए कार्रवाई की जोड़ी बनाने की सुविधा देता - -एक साधारण मॉडल बनाने देता है

static List<Details> details = new List<Details>(); 
    public ActionResult GetMe() 
    { 
     return View(); 
    } 

    public ActionResult SaveData(Details d) 
    { 
     details.Add(d); 
     return Json(details.Count, JsonRequestBehavior.AllowGet); 
    } 

तो एक साधारण दृश्य जो Ajax.BeginForm की मेजबानी करेगा बनाने की सुविधा देता() -

@model RamiSamples.Controllers.Details 

@{ 
    ViewBag.Title = "Ajax"; 
} 

<h2>Ajax</h2> 
<script src="~/Scripts/jquery-1.8.2.min.js"></script> 
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> 

@using (Ajax.BeginForm("SaveData", new AjaxOptions() 
{ 
    InsertionMode = InsertionMode.Replace, 
    UpdateTargetId = "dane" 
})) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend>Details</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Name) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Name) 
      @Html.ValidationMessageFor(model => model.Name) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Email) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Email) 
      @Html.ValidationMessageFor(model => model.Email) 
     </div> 

     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 
} 

<div id="dane"> 
    Number of Details : 
</div> 

पेज गाया जाता है जब -

enter image description here

अब आप डेटा जब प्रवेश करने और बनाने के बटन पर क्लिक करें -

enter image description here

और फिर पेज स्वचालित जोड़ की संख्या के साथ अद्यतन किया जाएगा जिन्हें आप नीचे देख -

enter image description here

+0

हाँ यह पूरी तरह से काम करता है। Tnx! –

+0

@ramiramilu इस अच्छे उदाहरण के लिए धन्यवाद। मैंने इस दृष्टिकोण को लागू करने में कामयाब रहा है, लेकिन 2 समस्याओं का सामना करना पड़ा: 1) मैं नियंत्रक से देखने के लिए 'TempData ["message"]' वापस लौटाता था। असल में यह भर जाता है और दृश्य में लौटाया जाता है, लेकिन देखा नहीं जा सकता है। क्या इस दृष्टिकोण के साथ 'TempData ["message"] 'का उपयोग करना संभव है? 2) मैं इस दृष्टिकोण के साथ नियंत्रक को अपलोड की गई फ़ाइल 'IENumerable फ़ाइलें' पास नहीं कर सकता। इसे कैसे हल करें? –

+0

@ क्रिस्टोफ आप AJAX का उपयोग कर फ़ाइलों को अपलोड कर सकते हैं और मैं एक बार जिस तरह से मैं 'TempData' का उपयोग करने के बारे में सोच सकता हूं,' पार्टियल व्यू 'वापस करने और लक्षित div को अपडेट करना होगा। – ramiramilu

संबंधित मुद्दे