ASP.NET MVC 2使用jQuery加载局部视图 - 没有客户端验证

Mak*_*jer 10 validation asp.net-mvc jquery partial-views asp.net-mvc-2

我jQuery.load()用来渲染局部视图.这部分看起来像这样:

$('#sizeAddHolder').load(
                '/MyController/MyAction', function () { ... });
Run Code Online (Sandbox Code Playgroud)

我的控制器中的操作代码如下:

    public ActionResult MyAction(byte id)
    {
        var model = new MyModel
        {
            ObjectProp1 = "Some text"
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult MyAction(byte id, FormCollection form)
    {
        // TODO: DB insert logic goes here

        var result = ...;

        return Json(result);
    }
Run Code Online (Sandbox Code Playgroud)

我返回的部分视图看起来像这样:

<% using (Html.BeginForm("MyAction", "MyController")) {%>
    <%= Html.ValidationSummary(true) %>

    <h3>Create my object</h3>

    <fieldset>
        <legend>Fields</legend>

        <div class="editor-label">
            <%= Html.LabelFor(model => model.ObjectProp1) %>
        </div>
        <div class="editor-field">
            <%= Html.TextBoxFor(model => model.Size.ObjectProp1) %>
            <%= Html.ValidationMessageFor(model => model.ObjectProp1) %>
        </div>

        div class="editor-label">
            <%= Html.LabelFor(model => model.ObjectProp2) %>
        </div>
        <div class="editor-field">
            <%= Html.TextBoxFor(model => model.ObjectProp2) %>
            <%= Html.ValidationMessageFor(model => model.ObjectProp2) %>
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>

<% } %>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,客户端验证不起作用.更重要的是,包含验证消息的脚本也不包含在返回的视图中.在我的模型类这两个属性都Required和StringLength属性.有没有办法在这样加载的视图中触发客户端验证?

Fle*_*exo 7

首先,您应该返回部分视图而不是视图.

return PartialView(model);
Run Code Online (Sandbox Code Playgroud)

其次,您是否尝试使用AJAX加载此局部视图?在这种情况下,您可能希望使用jquery.ajax

function ajax_update(path)
  $.ajax {
    url: path,
    success: function(result) {
      $('#sizeAddHolder').html(result);
    }
  return false;
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您提供有价值的信息.我已经纠正了这些错误,但这并没有真正有所作为.渲染的html在两种情况下完全相同,因为`load()`获取html与`ajax()`使用XMLHttpRequest和`返回View(模型)`的方式相同,如果没有SomeAction.aspx将呈现SomeAction.ascx .看看这里:http://stackoverflow.com/questions/2043394/what-is-the-difference-between-a-view-and-a-partialview-in-asp-net-mvc所以主要问题仍然是那里:没有客户端验证; 没有包含验证消息的脚本.. (2认同)