Я использую 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
атрибуты. Там какой-либо путь состоит в том, чтобы инициировать клиентскую проверку в представлении, которое было загружено как это?
Прежде всего вы должны вернуть частичное представление, а не представление.
return PartialView(model);
Во-вторых, вы пытаетесь загрузить это частичное представление с помощью AJAX? В этом случае вы можете использовать jquery.ajax
function ajax_update(path)
$.ajax {
url: path,
success: function(result) {
$('#sizeAddHolder').html(result);
}
return false;
}
Вы должны использовать 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.
Не уверен, что вы все еще ищете ответ на свой вопрос, но я написал статью о том, как заставить загруженные AJAX формы работать с валидацией на стороне клиента в ASP.NET MVC 2: http://tpeczek.com/2010/04/making-aspnet-mvc-2-client-side.html