0

我有一个视图名称“编辑”:

@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>
}

我想将用户名和密码输入的值传递回维护控制器的编辑(发布)操作结果。操作结果如下所示:

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

当我对 ActionResult 进行断点时,用户名和密码始终为空。它们不是视图模型的一部分,只是我需要传递给编辑方法的参数。

任何帮助表示赞赏

4

1 回答 1

3

重要的:

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

你可以在我的jsFiddle 中看到

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

编辑视图:

@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 部分:

@{
    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 :)

于 2013-06-12T22:08:50.183 回答