در مواردی لازم است بیش از یک بسته Data با شکل و بدنه متفاوت را از View به Controller ارسال کنیم. در این مقاله به صورت قدم به قدم به بررسی عملی چگونگی این روند خواهیم پرداخت.
بسمه تعالی
بررسی چگونگی ارسال مقادیر بیش از یک Model از سمت View به Controller از طریق Ajax
در مواردی لازم است بیش از یک بسته Data با شکل و بدنه متفاوت را از View به Controller ارسال کنیم. در این مقاله به صورت قدم به قدم به بررسی عملی چگونگی این روند خواهیم پرداخت.
در قدم اول : یک پروژه MVC 5 به نام iliasoft.ir_PassingMultipleModel ایجاد خواهیم کرد.
پس از ایجاد پروژه یکراست به سراغ ایجاد Model رفته و یک کلاس به نام Common ایجاد نمایید. من در اینجا هر سه کلاس مورد نیازم که نقش Model را بازی می نمایند را درون همین کلاس Common ایجاد میکنم.
- namespace iliasoft.ir_PassingMultipleModel.Models
- {
- public class Customer
- {
- public int CustomerId { set; get; }
- public string CustomerName { set; get; }
- public string Address { set; get; }
- }
- public class Employee
- {
- public int EmployeeId { set; get; }
- public string EmployeeName { set; get; }
- public string Address { set; get; }
- }
- public class Common
- {
- public Customer customer { set; get; }
- public Employee employee { set; get; }
- }
- }
کلاس Common در اصل یک ViewModel است که در بر گیرنده بدنه هر دو کلاس خواهد بود.حال وقت ایجاد یک Controller ساده و Action Method مورد نظر است .
در فولدر Contoller یک Controller جدید به نام DemoController ایجاد نمایید و بدنه آنرا به شکل زیر ایجاد نمایید.
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- using iliasoft.ir_PassingMultipleModel.Models;
- namespace PassingMultipleModel.Controllers
- {
- public class DemoController : Controller
- {
-
- public ActionResult Index()
- {
- return View();
- }
- public JsonResult Process(Common model)
- {
-
- return Json(JsonRequestBehavior.AllowGet);
- }
- }
- }
درون View یک فولدر به نام Demo ایجاد و یک View جدید به نام Index ایجاد کنید.
بدنه View از لحاظ Html به شکل زیر است .
- @model iliasoft.ir_PassingMultipleModel.Models.Common
- @{
- ViewBag.Title = "Index";
- }
- <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
- <h2>Customer</h2>
- <table>
- <tr><td>Customer Id</td><td>@Html.TextBoxFor(m => m.customer.CustomerId)</td></tr>
- <tr><td>Customer Name</td><td>@Html.TextBoxFor(m => m.customer.CustomerName)</td></tr>
- <tr><td>Address</td><td>@Html.TextBoxFor(m => m.customer.Address)</td></tr>
- </table>
- <h2>Employee</h2>
- <table>
- <tr><td>Employee Id</td><td>@Html.TextBoxFor(m => m.employee.EmployeeId)</td></tr>
- <tr><td>Employee Name</td><td>@Html.TextBoxFor(m => m.employee.EmployeeName)</td></tr>
- <tr><td>Address</td><td>@Html.TextBoxFor(m => m.employee.Address)</td></tr>
- </table>
- <input type="button" id="btnClick" value="Submit"/>
از لحاظ JS و Script هم به شکل زیر عمل کنید.
- <script>
- $("#btnClick").click(function () {
- var customer = {
- CustomerId: $('#@Html.IdFor(m=>m.customer.CustomerId)').val(),
- CustomerName: $('#@Html.IdFor(m=>m.customer.CustomerName)').val(),
- Address: $('#@Html.IdFor(m=>m.customer.Address)').val()
- }
- var employee = {
- EmployeeId: $('#@Html.IdFor(m=>m.employee.EmployeeId)').val(),
- EmployeeName: $('#@Html.IdFor(m=>m.employee.EmployeeName)').val(),
- Address: $('#@Html.IdFor(m=>m.employee.Address)').val()
- }
- var model = {
- "customer": customer,
- "employee": employee
- }
- $.ajax({
- type: "post",
- url: "/Demo/Process",
- data: model,
- datatype: "json",
- cache: false,
- success: function (data) {
- alert("You Multiple Data Passed Successfully");
- },
- error: function (xhr) {
- alert('No Valid Data');
- }
- });
- });
- </script>
تنها نکته موجود Html.IdFor@ است که بر اساس ID مقدار را به مقادیر JS ارسال میکند.
خوب چون سورس پروژه را هم در اختیار دارید، می توان گفت کار تمام است.
دانلود سورس پروژه