C# ASP.net MVC4 如何从局部视图 ActionResult 获取主视图控件值

C# ASP.net MVC4 How to get Main View Control Values from a Partial View ActionResult

我有一个带有文本框和下拉列表的主视图:

@using (Ajax.BeginForm("GetResults", "SomeController", new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "PartialDiv" }))

<select name ="dropdown1" onchange="$(this.form).submit();" >
    <option></option>                                                             
    @foreach (var recordrow in ...)                   
    {  
        <option value="@recordrow.Value" >@recordrow.Text</option>
    }
</select>

<select name ="dropdown2" >  
    <option></option>    
    @foreach (var recordrow in ...)
    {  
        <option value="@recordrow.Value" >@recordrow.Text</option>
    }
</select>
@Html.TextBox("textbox1", null, new { size = 10 })

<div id="PartialDiv" class="GroupBoxForeground" >
       @Html.Partial("PartialView")
    </div>

一旦主视图上的某些控件填充了值,主视图就会自动呈现局部视图。在局部视图中,有一个调用 ActionResult 的提交按钮。

局部视图的一部分:

@using (Ajax.BeginForm("Function1", "SomeController", new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "someDiv" }))
...
<input  type="submit" name="btn_submit"  value="Process" style="width:80px"  />

我的 ActionResult 如下所示:

[HttpPost]
public ActionResult Function1(FormCollection formdata, MasterModel MstModel)
{
    ...
}

我能够成功地将分部视图中的值绑定到 MasterModel。但是,我无法在调用 ActionResult 时获取主视图中控件的值。我在 FormCollection 中找不到密钥,并尝试了我在局部视图中用于模型绑定的相同方法。

两个视图都是 MasterModel 的强类型。

由于局部视图渲染后主视图中的值可以更改,因此我需要在局部视图中单击提交按钮时再次获取值。有没有办法在局部视图的 ActionResult 中的主视图中访问这些控件值?

编辑: 为了按照评论中的建议更清楚地解释这种情况,我的主视图基本上是一个带有文本框的搜索屏幕和一个下拉列表,部分视图稍后将使用这些列表进行处理。

我的部分视图(以单独的形式)显示了搜索结果以及内部的提交按钮,用于根据结果处理某些任务。但是,此处理还需要第二个下拉列表的值和主视图中文本框的值。即使在加载局部视图后,主视图中的这 2 个控件也可以更改。因此,我希望找到一些方法来在按下提交按钮时在主视图中获取这些值。

所以你的意思是,你有两个不同的表单。在 post 第二种形式中,您还需要 post 第一种形式的控件值。为此,您可以借助 jquery,因为表单外的值不会在 submit.

上 posted

您可以在第二个表单(部分视图表单)中创建 hidden 个字段,如:

@Html.Hidden("dropdown1value", "", new { @id = "ddl1val" })
@Html.Hidden("dropdown2value", "", new { @id = "ddl2val" })

然后在下拉列表 1 的更改事件中,您可以这样做:

//assuming 'dropdown1' is the `id` of your dropdown1
$("#dropdown1").change(function () {
      $("#ddl1val").val($("#dropdown1").val());

});

第二个下拉菜单的方法相同。 希望你已经明白了。