使用基于Remote属性的验证时必须双重提交

时间:2011-03-04 00:03:08

标签: validation asp.net-mvc-3 hidden-field

我们的模型上有一个具有[Remote]属性的字段。当我们将该字段存储在隐藏表单元素上然后尝试提交该表单时,我们必须单击两次提交按钮。同样有趣的是,我们第二次点击它时没有进行远程验证(Fiddler说)。

思想?

1 个答案:

答案 0 :(得分:0)

无法重复。如果使用Remote属性修饰隐藏字段,则无论您在远程功能发送false时单击提交按钮多少次,您都将无法提交表单。

例如:

型号:

public class MyViewModel
{
    [HiddenInput(DisplayValue = false)]
    [Remote("Check", "Home")]
    public string Id { get; set; }

    [Required]
    public string Name { get; set; }
}

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new MyViewModel
        {
            Id = "1"
        });
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return View(model);
    }

    public ActionResult Check(string Id)
    {
        return Json(Id == "2", JsonRequestBehavior.AllowGet);
    }
}

查看:

@model AppName.Models.MyViewModel

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

@using (Html.BeginForm())
{
    @Html.EditorForModel()
    <input type="submit" value="OK" />
}

因为远程函数总是返回false,所以无法提交此表单。如果远程函数返回true,则单击一次就足以提交它,当然假设其他验证已通过。