提问人:Mangesh 提问时间:8/22/2011 最后编辑:Mangesh 更新时间:8/22/2011 访问量:1230
如何从 Ajax.BeginForm 发布完整的 DropDownList,而不仅仅是 selectedId
How to Post full DropDownList from Ajax.BeginForm instead of just the selectedId
问:
//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,而不是 FULL DROPDOWN LIST。 如果我有很多下拉列表,我需要使用完整的下拉列表再次创建sm。 有没有办法我可以将整个下拉列表发送到控制器并返回相同的列表。
更新:AjaxOptions 中不应该有一个参数,它允许我们发布页面的完整列表(如果需要)以及 selectedIds。
答:
1赞
Arjan Einbu
8/22/2011
#1
简短的回答是否定的!由于 HTML 中的下拉列表不会返回其所有成员,而只返回选定的成员。
更长的答案是,ASP.NET WebForms 允许您执行您要求的操作,并且您可以通过创建类似于 ViewState 的机制来重新创建其中的一些 ASP.NET WebForms。
ASP.NET WebForms 的作用是将列表中的所有值存储在页面中两次。既在要显示的列表中,又在名为 ViewState 的隐藏字段中复制。然后,隐藏字段在提交时发送回服务器,并用于重新填充下拉列表。
你可以模仿 WebForms 在 MVC 中使用的相同行为 ASP.NET 方法是以某种方式序列化你的集合并将其放在一个隐藏的字段中。然后,在提交时,可以将隐藏字段中的数据反序列化回集合中,并使用它来填充下拉列表。
评论
id
value