gpt4 book ai didi

asp.net-mvc-3 - MVC3 Razor 局部 View 渲染不包括数据验证属性

转载 作者:行者123 更新时间:2023-12-04 01:32:47 26 4
gpt4 key购买 nike

我有一个非常直接的表单,它在表单的中心将个人数据呈现为部分 View 。我无法在此表单上进行客户端验证。
我开始追踪生成的 html 并想出了在标准表单和局部 View 上呈现的相同模型字段。

我注意到在第一次调用 @html.partial 时正确填充了输入元素,以下仅在通过 ajax 请求重新加载部分 View 时发生。

首先是我的部分 View 的标题,它位于主页上的 Ajax.BeginForm 中。

@model MvcMPAPool.ViewModels.EventRegistration
<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>
<script type="text/javascript">
$(document).ready(function ()
{
$(".phoneMask").mask("(999) 999-9999");
});
</script>

@{
var nPhn = 0;
var dTotal = 0.0D;
var ajaxOpts = new AjaxOptions{ HttpMethod="Post", UpdateTargetId="idRegistrationSummary", OnSuccess="PostOnSuccess" };
Html.EnableClientValidation( true );
Html.EnableUnobtrusiveJavaScript( true );
}

这是局部 View 中的 Razor 标记:
@Html.ValidationMessageFor(model=>Model.Player.Person.Addresses[0].PostalCode)
<table>
<tr>
<td style="width:200px;">City*</td>
<td>State</td>
<td>Zip/Postal Code</td>
</tr>
<tr>
<td>@Html.TextBoxFor(p=>Model.Player.Person.Addresses[0].CityName, new { style="width:200px;", maxlength=50 })</td>
<td>
@Html.DropDownListFor(p=> Model.Player.Person.Addresses[0].StateCode
, MPAUtils.GetStateList(Model.Player.Person.Addresses[0].StateCode))</td>
<td>
<div class="editor-field">
@Html.TextBoxFor(p=>Model.Player.Person.Addresses[0].PostalCode, new { style="width:80px;", maxlength=10 })
</div>
</td>
</tr>
</table>

这是局部 View 中呈现的字段:
        <td>
<div class="editor-field">
<input id="Player_Person_Addresses_0__PostalCode" maxlength="10" name="Player.Person.Addresses[0].PostalCode" style="width:80px;" type="text" value="" />
</div>
</td>

这是在标准 View 中呈现的相同模型字段:
        <div class="editor-field">            
<input data-val="true" data-val-length="The field Postal/Zip Code must be a string with a maximum length of 10." data-val-length-max="10" data-val-required="Postal or Zip code must be provided!" id="Person_Addresses_0__PostalCode" maxlength="10" name="Person.Addresses[0].PostalCode" title="Postal/Zip Code is required" type="text" value="" />
<span class="field-validation-valid" data-valmsg-for="Person.Addresses[0].PostalCode" data-valmsg-replace="true"></span>
</div>

请注意,局部 View 渲染在 input 元素上没有 data-val-xxx 属性。

这样对吗?如果没有这些属性,我看不到客户端验证如何工作,或者我在这里缺少一些基本的东西?

最佳答案

为了创建不显眼的验证属性,FormContext必须存在。在局部 View 的顶部添加以下内容:

if (this.ViewContext.FormContext == null) 
{
this.ViewContext.FormContext = new FormContext();
}

关于asp.net-mvc-3 - MVC3 Razor 局部 View 渲染不包括数据验证属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7487747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com