I'm just playing around with jQuery and MVC3 at the moment, and am wondering how I can submit a form, which has been dynamically loaded into a jQueryUI dialog?
My code so far consists of...
Javascript/jQuery
$(document).ready(function () {
$('.trigger').live('click', function (event) {
var id = $(this).attr('rel');
var dialogBox = $("<div>");
$(dialogBox).dialog({
autoOpen: false,
resizable: false,
title: 'Edit',
modal: true,
show: "blind",
hide: "blind",
open: function (event, ui) {
$(this).load("PartialEdit/" + id.toString());
}
}
});
$(dialogBox).dialog('open');
}) });
cshtml
<h2>Detail</h2><a href="#" class="trigger" rel="1">Open</a>
Controller
public ActionResult PartialEdit(int id)
{
return PartialView(new EditViewModel() { Name = id.ToString() });
}
[HttpPost]
public ActionResult PartialEdit(int id, FormCollection collection)
{
// What to put here???
}
The Partial View
....@using (Html.BeginForm()){....Html.EditorFor(model => model.Name).....}....
As you can see the load() in jQuery calls a PartialView named PartialEdit.
The form is loading up just fine, but I'm stuck working out how I actually submit the form?
Questions
How do I get the UI to submit the form, and close the dialog? What should the [HttpPost]PartialEdit return?
At the moment I have the submit button within the partial view. When clicked, the form is submitted, and the browser does whatever the [HttpPost]PartialEdit returns (currently resulting in a blank page being displayed).
However, after a submit I would like instead to trigger an event on the client side (Maybe a full page refresh, or a partial page refresh depending on the context it is used). I'm not sure where to start?
Also, should I be placing a submit button within the PartialView, or should I use the buttons on the jQuery-UI dialog?
Any suggestions/pointers appreciated.
Well, jQuery submit does nothing, you need to have a form inside the partial view, then what happen is when the jQuery dialog submit execute, you call your form submit which have the action defined already.
See my code below which is non ajax submit
And regarding ur question inside post action, you should perform your business logic then call "Return RedirectToAction("viewname",new {id=xxx})"
Try something among the lines:
and the controller action could return JSON:
The final part for improvement is this:
Never do such url hardcoding in an ASP.NET MVC application. Always use url helpers when dealing with urls. So make your anchor a little more dynamic and instead of:
use:
and then:
The button is ok under the partial view, but it sounds like you want to submit the form via AJAX so there's no page refresh. You can do that like this:
And return a JSON object from your HttpPost PartialEdit action that defines
IsError
,Error
, orMessage
as necessary. You can get fancier with this, but then this answer would be too long :)Thanks for all your input, the solution that is working for me at the moment is having this function attached to the "Submit" button on the dialog....
...which is a bit of a combination of the answers above.
Thanks again.
I faced a similar problem today, where I had to submit a form which was in a partial view - and the partial view was in a dialog, which was created from another form!
The crux was to get the handler of the form in the partial view and serialize it.
Here is how I defined my dialog in the first form: