【发布时间】:2011-10-31 17:53:04
【问题描述】:
//Model
public class SelectModel
{
public string CategoryId { get; set; }
public List<SelectListItem> List { get; set; }
}
//ViewModel
public class ViewModel
{
public SelectModel SelectMod { get; set; }
}
//OnIndex call
@Html.Partial("ViewUserControl1", Model.SelectMod)
//ViewUserControl1.cshtml
@model MvcApplication4.Models.SelectModel
<div id="formid">
@using (Ajax.BeginForm("Index1", "Home", new AjaxOptions { UpdateTargetId = "formid" }, new { id = "TheForm" }))
{
@Html.DropDownListFor(x => x.CategoryId, Model.List, "--Select One--")
<input type="submit" name="name" value="Submit" />
}
</div>
//Controller
public ActionResult Index1(SelectModel sm)
{
return PartialView("ViewUserControl1", sm);
}
所以现在当您发布 Ajax.BeginForm 时,我们会得到表单的 selectedId,而不是完整的下拉列表。 如果我有很多下拉列表,我是否需要使用完整的下拉列表再次创建 sm。 有没有办法可以将整个下拉列表发送到控制器并返回相同的内容。
更新: AjaxOptions 中是否应该有一个参数允许我们发布页面的完整列表(如果需要)以及 selectedIds。
【问题讨论】:
-
你能再解释一下你想要整个下拉列表吗?
id+value还不够吗? -
当我们提交表单时,可能会出现需要显示的验证错误,但为此我们需要再次绘制部分页面。页面可能包含下拉列表。您将如何填充下拉列表。如果sm 不包含它不会绘制的列表。
-
其他示例可能是登录部分页面。它有用户名、密码和状态可供选择,如果页面上有错误,您要返回带有状态下拉列表的页面。我知道我们可以做到使用 ajax 但这只是一个示例。
标签: c# asp.net-mvc-3 razor unobtrusive-javascript