我是asp.net mvc的新手,我正在尝试为asp.net mvc开发一个可重用的联系人表单组件。
我试着用表单创建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();
}
}
我的问题是,在某些必需字段为空的情况下,在这种情况下,控制器只返回部分视图,而不返回父上下文中的部分视图。我已尝试将父视图中的PartialView调用为@Html.Partial、@Html.RenderAction、@Html.RenderPartial,同样的情况也会发生。
如何返回父上下文中的局部视图?我试过return View(ParentViewsName,contactData),但我不喜欢它,因为在提交表单时,它将地址栏上的url从/Contact更改为/ContactForm/ContactForm。
我试图用错误的方法创建一个可重复使用的组件?最好只使用ajax更新PartialView?替代方案?
感谢
根据我的理解,您希望在用户成功提交表单后显示状态消息,这是一个局部视图。我认为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"]是否为null,并显示部分视图"MessageSend"。
最后,正如Sundeep所解释的,我已经用ajax完成了这项工作,比如这个例子Partial ASP.NET MVC View submit。
谢谢你的帮助。