在asp.net mvc中创建可重用的表单联系人组件



我是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。

谢谢你的帮助。

最新更新