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

时间:2012-12-13 20:32:44

标签: asp.net-mvc

我是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?替代?

由于

2 个答案:

答案 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

感谢您的帮助。