【问题标题】:How to Post full DropDownList from Ajax.BeginForm instead of just the selectedId如何从 Ajax.BeginForm 发布完整的 DropDownList 而不仅仅是 selectedId
【发布时间】: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


【解决方案1】:

简短的回答是否定的!由于 HTML 中的下拉列表不会返回其所有成员,而只会返回选定的成员。

更长的答案是 ASP.NET WebForms 允许您做您想做的事情,您可以通过创建类似于 ASP.NET WebForms 中的 ViewState 的机制来重新创建其中的一些。

ASP.NET WebForms 所做的是将列表中的所有值存储在页面中两次。既可以在列表中显示,也可以在称为 ViewState 的隐藏字段中复制。然后隐藏字段在提交时被发送回服务器并用于重新填充下拉列表。

您可以通过以某种方式序列化您的集合并将其置于隐藏字段中来模仿 ASP.NET WebForms 在 MVC 中使用的相同行为。然后在提交时,您可以将隐藏字段中的数据反序列化回集合中,并使用它来填充下拉列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 2013-01-09
    相关资源
    最近更新 更多