I am using jQuery.load()
to render a partial view. This part looks like this:
$('#sizeAddHolder').load(
'/MyController/MyAction', function () { ... });
The code for actions in my controller is the following:
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);
}
I am returning a partial view that looks something like this:
<% 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>
<% } %>
Client side validation does not work in this case. What is more the script that contains validation messages also isn't included in the view that's returned. Both properties in my model class have Required
and StringLength
attributes.
Is there any way to trigger client side validation in a view which has been loaded like this?
I'm not sure if you are still loking for answer to your question, but I have write a post about making AJAX loaded forms work with client-side validation in ASP.NET MVC 2: http://tpeczek.com/2010/04/making-aspnet-mvc-2-client-side.html
In the html file you can have something like:
sorry about that but I don't no how post a link html. So you can have a link class="delete", id= value and a href = "javascript:;"
Then I used this function to render a partial view:
Remember in the controler you must have a action like:
The problem is that the form loaded with ajax never gets registered with the Microsoft validation. To solve it call the following function Sys.Mvc.FormContext._Application_Load.
That should fix it. Also, make sure that the forms you load via ajax have unique id's. Otherwise, the validation will fail.
Avoid using load(). It removes any scripts loaded in the response.
this is applicable: asp-net-mvc-client-side-validation-with-dynamic-contents
First of all you should return a partial view and not a view.
Second, are you trying to load this partial view with AJAX? In that case you might want to use jquery.ajax
You should use dataType on the ajax call
From jQuery docs:
dataType Default: Intelligent Guess (xml, json, script, or html)
The type of data that you're expecting back from the server. If none is specified, jQuery will intelligently try to get the results, based on the MIME type of the response (an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string). The available types (and the result passed as the first argument to your success callback) are: