将模态对话框局部视图中的值过帐到控制器

时间:2013-06-12 21:44:00

标签: asp.net-mvc controller partial-views actionresult

我有一个名字“编辑”:

@model EMMS.ViewModels.MaintenanceViewModel

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset style="width: 800px;">
        <legend>Maintenance Details</legend>
        <div class="editor">
            @Html.LabelFor(model => model.EquipmentID)
            @Html.TextBoxFor(model => model.EquipmentID, new { style = "width: 200px;" })
            @Html.ValidationMessageFor(x => x.EquipmentID)
        </div>
    </fieldset>
    <div id="dialog-validate-user" style="display: none;">
        @Html.Partial("_ValidateUser")
    </div>
}

它包含一个jquery UI对话框,其中填充了以下部分视图:

@{
    ViewBag.Title = "_ValidateUser";
}

<h3>User Verification Required</h3>
<p>Please enter your network login credentials.</p>
@using (Html.BeginForm("Edit", "Maintenance", FormMethod.Post)) {
    <div>
        <p>
            <span>User Name:</span>
            @Html.TextBox("UserName")
        </p>
        <p>
            <span>Password:</span>
            @Html.Password("Password")
        </p>
    </div>
}

我想将UserName和Password输入的值传递回维护控制器的编辑(post)actionresult。操作结果如下所示:

[HttpPost]
public ActionResult Edit(MaintenanceViewModel maintenanceViewModel, string UserName, string Password)
{
}

当我断开ActionResult的断点时,UserName和Password始终为null。它们不是viewmodel的一部分,只是我需要传递给edit方法的参数。

感谢任何帮助

1 个答案:

答案 0 :(得分:3)

重要:

当你在该div上使用jQuery UI对话框时,它会从表单中删除它。这就是为什么它们是空的。

您可以在我的jsFiddle here中看到。

如果我是你,我会把表单分开,这样它们就不会嵌套。

修改视图

@model EMMS.ViewModels.MaintenanceViewModel

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <fieldset style="width: 800px;">
        <legend>Maintenance Details</legend>
        <div class="editor">
            @Html.LabelFor(model => model.EquipmentID)
            @Html.TextBoxFor(model => model.EquipmentID, new { style = "width: 200px;" })
            @Html.ValidationMessageFor(x => x.EquipmentID)
        </div>
    </fieldset>
}
<div id="dialog-validate-user" style="display: none;">
     @Html.Partial("_ValidateUser")
</div>

_ValidateUser Partial:

@{
    ViewBag.Title = "_ValidateUser";
}

<h3>User Verification Required</h3>
<p>Please enter your network login credentials.</p>
@using (Html.BeginForm("Login", "Maintenance", FormMethod.Post))
{
    <div>
        <p>
            <span>User Name:</span>
            @Html.TextBox("UserName")
        </p>
        <p>
            <span>Password:</span>
            @Html.Password("Password")
        </p>
    </div>
}

<强>控制器:

[HttpPost]
public ActionResult Login(string UserName, string Password)
{
    // do something here with the login
}

MVC的美妙之处在于适当的分离。

请记住,自定义ViewModel的重点是组合这些字段。

<强>此外:

在获得有关要求的更多信息之后,这里最好的解决方案是删除部分表单并将用户名和密码添加到ViewModel:)