我是asp.net mvc的新手,我正在尝试为asp.net mvc开发一个可重用的联系表单组件。
我尝试用表单创建一个PartialView,我不知道这是否是更好的方法,用于创建可重用的组件
我的PartialView是
@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>
}
问题始于控制器,控制器只是这个partialView的特定控制器。
public class ContactFormController : Controller
{
[HttpPost]
public ActionResult ContactForm(ContactData contactData)
{
if (ModelState.IsValid)
{
return PartialView("MessageSend");
}
return PartialView();
}
}
我的问题是在某些必填字段为空的情况下,在这种情况下,控制器仅返回部分视图,而不返回其父上下文中的partival视图。我尝试从父视图中调用PartialView作为@ Html.Partial,@ Html.RenderAction,@ Html.RenderPartial,同样的情况也是如此。
如何在其内部的Context中返回局部视图?我试过了 返回View(ParentViewsName,contactData),但我不喜欢它,因为在表单提交时,它会更改地址栏上的url / Contact to / ContactForm / ContactForm。
Perphaps我正在尝试用错误的方法创建可重用的组件?最好只用ajax更新PartialView?替代?
由于
答案 0 :(得分:0)
根据我的理解,您希望显示状态消息,这是用户成功提交表单后的部分视图。我认为tempdata适合这种情况。
public class ContactFormController : Controller
{
[HttpPost]
public ActionResult ContactForm(ContactData contactData)
{
if (ModelState.IsValid)
{
TempData["success"] = true;
return RedirectToAction("parentpage");
}
return View(contactData);
}
}
在父页面中,检查TempData [“success”]是否为空并显示部分视图“MessageSend”。
答案 1 :(得分:0)
最后,正如Sundeep所解释的那样,我用ajax这样做了Partial ASP.NET MVC View submit。
感谢您的帮助。