在页面上多次使用视图模型时的客户端验证问题

时间:2015-07-24 08:19:38

标签: c# jquery asp.net-mvc-5 jquery-validate kendo-asp.net-mvc

我有一个视图模型,其中包含4个属性,用户名,角色,应用程序和原因(必需)。然后我使用以下html助手在视图中显示这些:

<form id="roleForm">
    <fieldset>
        <p>
            @Html.LabelFor(model => model.RoleName)
            @Html.DisplayWithIdFor(model => model.RoleName)
            @Html.HiddenFor(model => model.RoleName)
        </p>
        <p>
            @Html.LabelFor(model => model.UsersName)
            @Html.DisplayFor(model => model.UsersName)
            @Html.HiddenFor(model => model.UsersName)
        </p>
        <p>
            @Html.LabelFor(model => model.Application)
            @Html.DisplayFor(model => model.Application)
            @Html.HiddenFor(model => model.Application)
        </p>
        <p>
            @Html.LabelFor(model => model.Reasons)
            @Html.TextAreaFor(model => model.Reasons, new { @cols = "80", @rows = "4", @class = "k-textbox" })
            <span style="color:red;">@Html.ValidationMessageFor(model => model.Reasons)</span>
        </p>
        <button class="button-yes k-button" type="button">OK</button>
        <button class="button-no k-button" type="button">Cancel</button>
        <!-- Allow form submission with keyboard without duplicating the dialog button -->
        <input type="submit" tabindex="-1" style="position:absolute; top:-1000px">
    </fieldset>
</form>

然而,由于一个页面上特定系统的性质,我需要在单个页面上使用此视图模型的3个不同的东西。要做到这一点,我有3个部分视图和3个Kendo UI窗口,再次这个部分正在工作。

然后出现问题,JQuery总是在页面上定义第一个文本区域,这是预期的,因为它们都具有相同的ID,因此我希望更改其他2个文本区域的ID,请参阅下面的内容:< / p>

@ Html.TextAreaFor(model =&gt; model.Reasons,new {@id =“AddCompanyReasons”,@ cols =“80”,@rows =“4”,@ class =“k-textbox”})< / p>

现在找到正确的文本区域。但是现在的问题是,尽管从文本框中获取了文本或缺少文本,但验证总是在客户端返回true。

var isReasonValid = $('#AddCompanyReasons').valid();

我曾经想过,每次在页面上显示属性时,创建一个属性来稍微更改属性名称可能会解决这个问题,但这看起来有点极端。

之前有没有人遇到过这个问题,有没有人对如何解决这个问题有任何想法?

修改

Terleric Kendo Window Popups显示三种形式:

@(Html.Kendo().Window()
    .Name("remove-role-window")
    .Title("Update Roles")
    .Visible(false)
    .Content(@<text>
        @Html.Partial("~/Areas/UserCurrentRoles/Views/UserCurrentRoles/_AXRemoveRole.cshtml")
    </text>)
    .Modal(true)
    .Width(500)
    .Events(e => e.Open("resetDialog"))
)

@(Html.Kendo().Window()
    .Name("remove-company-window")
    .Title("Update Roles")
    .Visible(false)
    .Content(@<text>
        @Html.Partial("~/Areas/UserCurrentRoles/Views/UserCurrentRoles/_RemoveAXCompany.cshtml")
    </text>)
    .Modal(true)
    .Width(500)
    .Events(e => e.Open("resetCompanyDialog"))
  )

@(Html.Kendo().Window()
    .Name("add-company-window")
    .Title("Update Roles")
    .Visible(false)
    .Content(@<text>
         @Html.Partial("~/Areas/UserCurrentRoles/Views/UserCurrentRoles/_AddAXCompany.cshtml", Model)
    </text>)
    .Modal(true)
    .Width(500)
    .Events(e => e.Open("resetAddDialog"))
)

1 个答案:

答案 0 :(得分:-1)

验证适用于文档就绪。文档就绪后,如果html动态变化。通过任何操作意味着任何元素已被重新打印或重新创建将不会被验证。您将不得不再次运行验证功能以验证所有字段。