【发布时间】:2017-10-02 20:43:18
【问题描述】:
我有以下视图模型代码:
public class TestCheckboxlistParentModel
{
public TestCheckboxlistParentModel()
{
CBL = new TestCheckboxlistModel();
}
public TestCheckboxlistModel CBL { get; set; }
}
public class TestCheckboxlistModel
{
public string TextField { get; set; }
public IList<string> SelectedFruits { get; set; }
public IList<SelectListItem> AvailableFruits { get; set; }
public TestCheckboxlistModel()
{
SelectedFruits = new List<string>();
AvailableFruits = new List<SelectListItem>();
}
}
控制器:
public ActionResult TestCheckboxlist()
{
var model = new TestCheckboxlistParentModel
{
CBL = new TestCheckboxlistModel()
{
AvailableFruits = GetFruits()
}
};
return View(model);
}
[HttpPost]
public ActionResult TestCheckboxlist(TestCheckboxlistParentModel model)
{
if (ModelState.IsValid)
{
// Save data to database, and redirect to Success page.
return RedirectToAction("Success");
}
//model.AvailableFruits = GetFruits();
return View(model);
}
public ActionResult Success()
{
return View();
}
private IList<SelectListItem> GetFruits()
{
return new List<SelectListItem>
{
new SelectListItem {Text = "Apple", Value = "1"},
new SelectListItem {Text = "Pear", Value = "2"},
new SelectListItem {Text = "Banana", Value = "3"},
new SelectListItem {Text = "Orange", Value = "4"},
};
}
局部视图:
@model Web.ViewModels.TestCheckboxlistModel
<div class="form-group">
@Html.LabelFor(model => model.TextField)
<div class="col-md-10">
@Html.EditorFor(model => model.TextField)
</div>
</div>
@foreach (var item in Model.AvailableFruits)
{
<div class="checkbox">
<label>
<input type="checkbox"
name="@Html.IdFor(p=>p.SelectedFruits)"
value="@item.Value" /> @item.Text
</label>
</div>
}
查看:
@model Web.ViewModels.TestCheckboxlistParentModel
@{
ViewBag.Title = "TestCheckboxlist";
Layout = "~/Views/Shared/_LayoutApplicationDriver.cshtml";
}
@using (Html.BeginForm())
{
@Html.Partial("TestPartialCheckboxlist", Model.CBL, new ViewDataDictionary { TemplateInfo = new TemplateInfo { HtmlFieldPrefix = "CBL" } })
<div class="form-group text-center">
<input type="submit" class="btn btn-primary" value="Submit" />
</div>
}
问题是 SelectedFruits 在 post 方法中始终没有任何元素。如果我不使用嵌套的局部视图,相同的代码可以正常工作。属性 TextField 与 Partial 一起工作正常
PS。这不是How to make Check Box List in ASP.Net MVC 问题的重复。这个问题是我回答的基础。就我而言,我需要在部分视图中有复选框列表,但它不起作用!
【问题讨论】:
-
看起来你已经从这个问题stackoverflow.com/a/37779070/6535663 中得到了帮助。在输入/复选框的部分视图中,将名称更改为
SelectedFruits。<input type="checkbox" name="SelectedFruits" value="@item.Value" /> @item.Text </label> -
将部分放在视图的 Edit 文件夹中,并在主视图上调用 editor-for 模板。我的猜测是,由于您只呈现部分而不是编辑模板,因此视图不会像应有的那样将父信息添加到 ID。
-
这是一种创建复选框列表的奇怪方法。建议您参考this answer中的代码
-
@DavidLee,这不是重复的
标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-partialview