0

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

}

问题从控制器开始,控制器是仅针对此部分视图的特定控制器。

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,同样的情况也会发生。

如何在其父上下文中返回部分视图?我曾尝试使用返回视图(ParentViewsName,contactData),但我不喜欢它,因为在提交表单时,它会将地址栏上的 URL 从 /Contact 更改为 /ContactForm/ContactForm。

也许我试图用错误的方法创建一个可重用的组件?最好只用 ajax 更新 PartialView?备择方案?

谢谢

4

2 回答 2

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”。

于 2012-12-13T21:50:13.413 回答
0

最后,正如 Sundeep 解释的那样,我已经使用 ajax 完成了此操作,例如Partial ASP.NET MVC View submit

谢谢你的帮助。

于 2012-12-17T19:17:00.860 回答