ASP.NET MVC 2, загружающийся частичное представление с помощью jQuery - никакая клиентская проверка

Я использую jQuery.load() представлять частичное представление. Эта часть похожа на это:

$('#sizeAddHolder').load(
                '/MyController/MyAction', function () { ... });

Код для действий в моем контроллере следующий:

    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);
    }

Я возвращаю частичное представление, которое выглядит примерно так:

<% 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>

<% } %>

Клиентская проверка не работает в этом случае. Что является больше сценарием, который содержит сообщения проверки, также не включен в представление, это возвращается. Оба свойства в моем образцовом классе имеют Required и StringLength атрибуты. Там какой-либо путь состоит в том, чтобы инициировать клиентскую проверку в представлении, которое было загружено как это?

10
задан Maksymilian Majer 16 April 2010 в 11:44
поделиться

3 ответа

Прежде всего вы должны вернуть частичное представление, а не представление.

return PartialView(model);

Во-вторых, вы пытаетесь загрузить это частичное представление с помощью AJAX? В этом случае вы можете использовать jquery.ajax

function ajax_update(path)
  $.ajax {
    url: path,
    success: function(result) {
      $('#sizeAddHolder').html(result);
    }
  return false;
}
7
ответ дан 4 December 2019 в 00:23
поделиться

Вы должны использовать dataType в вызове ajax

function ajax_update(path)
  $.ajax {
    url: path,
    dataType: "html",
    success: function(result) {
      $('#sizeAddHolder').html(result);
    }
  return false;
}

From jQuery docs :

dataType По умолчанию: Intelligent Guess (xml, json, script или html)

Тип данных, которые вы ожидаете от сервера. Если ничего не указано, jQuery будет разумно пытаться получить результаты на основе MIME-типа ответа (MIME-тип XML даст XML, в 1.4 JSON даст объект JavaScript, в 1.4 скрипт выполнит скрипт и все, что угодно. иначе будет возвращено в виде строки). Доступные типы (и результат, переданный в качестве первого аргумента вашего успешного обратного вызова):

* "xml": Returns a XML document that can be processed via jQuery.
* "html": Returns HTML as plain text; included script tags are evaluated when inserted in the DOM.
* "script": Evaluates the response as JavaScript and returns it as plain text. Disables caching unless option "cache" is used. Note: This will turn POSTs into GETs for remote-domain requests.
* "json": Evaluates the response as JSON and returns a JavaScript object. In jQuery 1.4 the JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. (See json.org for more information on proper JSON formatting.)
* "jsonp": Loads in a JSON block using JSONP. Will add an extra "?callback=?" to the end of your URL to specify the callback.
* "text": A plain text string.
2
ответ дан 4 December 2019 в 00:23
поделиться

Не уверен, что вы все еще ищете ответ на свой вопрос, но я написал статью о том, как заставить загруженные AJAX формы работать с валидацией на стороне клиента в ASP.NET MVC 2: http://tpeczek.com/2010/04/making-aspnet-mvc-2-client-side.html

1
ответ дан 4 December 2019 в 00:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: