I’m newbie at asp.net mvc, I’m trying to develop a reusable contact form component for asp.net mvc .
I have tryed to do it creating a PartialView with a form, I don’t know if this is the better approach, for create a reusable component
My PartialView is
@model MyModel.ContactData
@using (Html.BeginForm("ContactForm", "ContactForm", FormMethod.Post)) {
<fieldset>
<p>
@Html.LabelFor(model => model.MailAddress)
@Html.EditorFor(model => model.MailAddress)
</p>
<p>
@Html.LabelFor(model => model.Message)
@Html.TextAreaFor(model => model.Message)
</p>
<input type="submit" value="Save" />
</fieldset>
}
The problems start with the controller, the controller is a specific controller for only this partialView.
public class ContactFormController : Controller
{
[HttpPost]
public ActionResult ContactForm(ContactData contactData)
{
if (ModelState.IsValid)
{
return PartialView("MessageSend");
}
return PartialView();
}
}
My problem is in case of some of the required fields are empty, in that case the controller returns only the partial view, not returning the partival view inside its parent context. I have tryed calling the PartialView from parent View as @Html.Partial, @Html.RenderAction, @Html.RenderPartial and the same occurs.
How can I return the partial view Inside it’s parent Context? I have tried with
return View(ParentViewsName, contactData) but I dislike it because on form submitting it changes the url on address bar from /Contact to /ContactForm/ContactForm.
Perphaps I’m trying to create a reusable component with a wrong approach? It’s better to update with ajax only the PartialView? Alternatives?
Thanks
Finally as Sundeep explains I have done this with ajax like this example Partial ASP.NET MVC View submit.
Thanks for your help.