如何访问使用Ajax加载的局部视图中的数据

时间:2013-08-30 06:51:49

标签: asp.net-mvc-4

我目前正在建立一个网站,我必须从一个Ajax.BeginForm更新两个单独的目标。我通过使用一个额外的容器来容纳两个单独的目标。如:

  1. 原始表格

    @model Mod1
    @using (Ajax.BeginForm("LoadData", new AjaxOptions{UpdateTargetID = "Div1"}))
    {
      <select id="sel1" name="sel1" onchange="$(this.form).submit">
        // ...
      </select>
    }
    @using (Ajax.BeginForm("ProcessData", new AjaxOptions{UpdateTargetID = "Div2"}))
    {
      <div id="Div1"></div>
        // ...
      <input type="submit" value="GO!" />
    }
    
  2. 代码文件

    public ActionResult LoadData(int sel1)
    {
      // loading data from database
      return PartialView(mod1);
    }
    
  3. 部分视图

    @model Mod2
    <select id="sel2" name="sel2">
      @foreach (var item in Model.SelectItems)
      {
        <option value="@item.Value">@item.Text</option>
      }
    </select>
    
    @foreach (var item in Model.CheckBoxItems)
    {
      <label>@item.Text<input type="checkbox" id="chk1" name="chk1" value="@item.Value"></label>
    }
    
  4. 对于处理方法,我尝试过:

        public ProcessData(Mod1 mod1, string[] chk1, int sel2)
    

    但是,在提交表单时,我无法检索chk1或sel2的值。在调试模式下检查chk1和sel2时,chk1为空,而sel2为0(选择选项中没有这样的值)。任何人都可以提供一些见解的原因,以及我如何解决它。提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果我理解你的话,你可以做你想要的,你在同一个表格上有两个提交按钮,每个按钮都有一个单独的动作方法。这样,每个提交按钮都可以访问表单中的所有字段。有关如何执行此操作的详细说明,请参阅此处的答案:

How to use ajax link instead of submit button for form?

修改

响应评论:操作方法LoadData应返回包含其他两个控件的部分视图,并包含整个开始表单:

@using (Ajax.BeginForm("LoadData", new AjaxOptions{
                                                UpdateTargetID = "Div1",
                                                InsertionMode = InsertionMode.Replace
                                                  })) 
{
    <select id="sel1" name="sel1" onchange="$(this.form).submit">
    // ...
    </select>
}
<div id="Div1">
</div>
<div id="Div2">
</div>

将其移至另一个局部视图:

    @using (Ajax.BeginForm("ProcessData", new AjaxOptions{UpdateTargetID = "Div2"}))
    {

        // ...
        <input type="submit" value="GO!" />
    }