Asp.Net MVC4 - 局部视图中的表单

时间:2012-12-08 05:31:07

标签: c# razor asp.net-mvc-4 partial-views unobtrusive-validation

我有以下数据模型

public class User
{
        [Required(ErrorMessage = "First name required!")]
        public string FirstName { get; set; }

        [Required(ErrorMessage = "Last name required!")]
        public string LastName { get; set; }
}

我有以下名为“UserForm”的视图,它使用上面的模型

@model User
@using (Html.BeginForm("myAction", "MyController"))
{
@Html.TextBoxFor(model => model.FirstName)
@Html.TextBoxFor(model => model.LastName)
@Html.ValidationSummary()
<input type="submit" value="Save" />
}

我已经测试了上面的代码和不显眼的验证和表单帖子正常工作,没有任何问题。但是,如果我将上面的视图作为局部视图包含在第二个视图中,如下所示,那么客户端不显眼的验证将停止工作。

<div id="myPartialView">
<!-- Include form as partial view -->
@{Html.RenderAction("myAction", "MyController");}
</div>

我尝试使用以下javascript行明确重新加载不显眼的验证

jQuery.validator.unobtrusive.parse('#myPartialView');

现在验证工作正常,但我无法提交表单。我使用了fiddler,我可以看到单击提交按钮不会触发任何活动。对我可能做错了什么的想法?

1 个答案:

答案 0 :(得分:2)

对于任何绊倒这个问题的人,我现在已经解决了这个问题。我的表单嵌入在Jquery模式框中,我有一个无效的html标记。这并没有导致模式停止工作,但阻止我的表单提交。 (我仍然不确定为什么)。我使用来自w3c

的优秀html验证器发现了这个错误

http://validator.w3.org

应该注意的是,我仍然需要

jQuery.validator.unobtrusive.parse('#myPartialView');

使客户端验证适用于动态内容。这是一个众所周知的问题,在@Mate上面发布的链接中有更详细的讨论