POST数据中不包含MVC 3远程验证表单按钮

MIa*_*sca 6 asp.net-mvc asp.net-mvc-3

我有一个ASP.NET MVC3应用程序,并在我的一个模型类上进行远程验证.我发现,如果我打开了该模型和远程验证例程编辑观点IS NOT称为(由于未编辑与它的远程验证字段)在提交表单前,按钮点击张贴形式IS NOT列入请求发送到Action方法的数据.

如果远程验证例程IS被贴在表格之前叫-按钮点击提交表单IS包括在后.

我需要知道在服务器上调用Action时单击了哪个按钮,以便我可以确定用户是否单击了UPDATE或CANCEL.

如果我从模型中删除远程验证,则表单每次都会正确提交.

为什么在表单提交之前未调用远程验证时,用于提交表单的按钮将从表单发布中排除.

谢谢迈克尔

以下是一些示例代码:

@model Channel
<script src="@Url.Content("~/Scripts/jquery-1.6.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
<fieldset>
    <legend>Edit Channel</legend>

    @Html.HiddenFor(model => model.ChannelGUID)


    <div class="editor-label">Name</div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Name)
        @Html.ValidationMessageFor(model => model.Name)
    </div>

    <div class="editor-label">Description</div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Description)
        @Html.ValidationMessageFor(model => model.Description)
    </div>

    <div class="editor-label">Channel Code</div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Code)
        @Html.ValidationMessageFor(model => model.Code)
    </div>

    <p>
        <button type="submit" name="updateCommand" value="Update">Update</button>
        <button type="submit" class="cancel">Cancel</button>
    </p>
</fieldset>
}
Run Code Online (Sandbox Code Playgroud)

这是行动

[HttpPost]
public ActionResult Edit(string updateCommand, Channel channel)
{
    if (updateCommand != null)
    {
     //update clicked
    }
    else
    {
     //cancel clicked
    }
Run Code Online (Sandbox Code Playgroud)

这是模型属性Code的远程属性

[Remote("IsChannelCodeUnique", "Channel", AdditionalFields = "ChannelGUID", ErrorMessage = "code must be unique")]
Run Code Online (Sandbox Code Playgroud)

MIa*_*sca 0

我将取消按钮更改为链接(使用操作链接),并使用 jQuery UI 来设计链接和表单上的提交按钮的样式,使其看起来相同。这避免了我所遇到的单击按钮未包含在 POST 数据中的问题。现在,当调用该操作时,我不需要确定单击的按钮来查看用户是否按下了取消。