我有一个简单的表单,其中包含项目列表,我想将它们发布到控制器,但有趣的是我不能。除列表外,其他所有内容均正常处理。我检查了萤火虫中的ajax调用,并且帖子值像这样:
Answers[0].IsMissing False Answers[0].Text Ja Answers[0].Value 0 Answers[1].IsMissing False Answers[1].Text Nein Answers[1].Value 1 Id 1cd14b08-ce3b-4671-8cf8-1bcf69f12b2d Name Ja/Nein
我有一个具有以下属性的AnwserScheme类:
public string Name { get; set; } public bool IsMissing { get; set; } public List<AnswerDisplayItem> Answers { get; set; } public AnswerScheme() { Answers = new List<AnswerDisplayItem>(); }
我有此查看代码:
@for (int i = 0; i < Model.Answers.Count; i++) { <tr> <td> @Html.HiddenFor(model => Model.Answers[i].IsMissing) @Html.TextBoxFor(model => Model.Answers[i].Value, new { @class = "inputValue" }) </td> <td> @Html.TextBoxFor(model => Model.Answers[i].Text, new { @class = "inputAnswer" }) </td> <td> <span class="span-delete" data-answer-scheme-id="@Model.Id" data-answer-id="@Model.Answers[i].Id" >x</span> </td> </tr> }
我有这段ajax代码负责发布:
$.ajax({ url: "/AnswerScheme/AddAnswer", type: "post", data: $("#formAnswerScheme").serialize(), success: function (data) { console.log(data); $("#divAnswerSchemeContainer").html(data); } });
我的控制器中有一个添加答案操作:
[HttpPost] public PartialViewResult AddAnswer(AnswerScheme answerScheme) { ...some logic comes here }
因此,最后,控制器只接收模型,而仅接收简单属性,而不接收列表。任何帮助将不胜感激!干杯。
我希望我能看到更多的类和代码,因为您没有正确的设置。
我根据您提供的内容重新创建了一些有效的方法。我为此示例创建了一个MVC 3项目。
视图/共享/_Layout.cshtml
<!DOCTYPE html> <html> <head> <title>@ViewBag.Title</title> <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script> </head> <body> @RenderBody() </body> </html>
视图/共享/_Partial.cshtml
@model RazorListTest.Models.AnswerScheme <table> @for (int i = 0; i < Model.Answers.Count; i++) { <tr> <td> @Html.HiddenFor(model => Model.Answers[i].IsMissing) @Html.TextBoxFor(model => Model.Answers[i].Value, new { @class = "inputValue" }) </td> <td> @Html.TextBoxFor(model => Model.Answers[i].Text, new { @class = "inputAnswer" }) </td> <td><span class="span-delete" data-answer-scheme-id="@Model.Id" data-answer-id="@Model.Answers[i].Id" >x</span></td> </tr> } </table>
型号/AnswerDisplayItem.cs
using System.Collections.Generic; namespace RazorListTest.Models { public class AnswerDisplayItem { public bool IsMissing { get; set; } public string Text { get; set; } public string Value { get; set; } public string Id { get; set; } } public class AnswerScheme { public List<AnswerDisplayItem> Answers { get; set; } public string Id { get; set; } public AnswerScheme() { Answers = new List<AnswerDisplayItem>(); } } }
主页/Index.cshtml
@model RazorListTest.Models.AnswerScheme @using (Html.BeginForm(null, null, FormMethod.Get, new { name="formAnswerScheme", id = "formAnswerScheme"})) { {Html.RenderPartial("_Partial");} <div> <input type="button" value="Click me" id="btnClick"/> </div> <div id="divAnswerSchemeContainer"> </div> } <script type="text/javascript"> $("#btnClick").click(function () { $.ajax({ url: 'Home/AddAnswer', type: 'POST', dataType: 'json', data: $("#formAnswerScheme").serialize(), success: function (data) { console.log(data); $("#divAnswerSchemeContainer").html(data); }, error: function (xhr, textStatus, exceptionThrown) { alert(JSON.parse(xhr.responseText)); } }); }); </script>
控制器/HomeController.cs
using System.Collections.Generic; using System.Web.Mvc; using RazorListTest.Models; namespace RazorListTest.Controllers { public class HomeController : Controller { public ActionResult Index() { AnswerScheme a = new AnswerScheme(); a.Id = "1cd14b08-ce3b-4671-8cf8-1bcf69f12b2d"; List<AnswerDisplayItem> adi = new List<AnswerDisplayItem>(); AnswerDisplayItem a1 = new AnswerDisplayItem(); a1.IsMissing = false; a1.Text = "Ja"; a1.Value = "0"; a1.Id = "1234"; AnswerDisplayItem a2 = new AnswerDisplayItem(); a2.IsMissing = false; a2.Text = "Nein"; a2.Value = "1"; a2.Id = "5678"; adi.Add(a1); adi.Add(a2); a.Answers = adi; return View(a); } [HttpPost] public JsonResult AddAnswer(AnswerScheme answerScheme) { return Json("the list is in the Model."); } } }