在部分视图中发布表格

时间:2014-02-09 19:27:44

标签: asp.net-mvc asp.net-mvc-4 razor

我是MVC 4和razor的新手,我的布局视图包含位于局部视图中的表单,

我的模特:

public class SubscribeModel
{
    [Required(ErrorMessage = "Veuillez saisir votre adresse mail pour s'inscrire ...")]
    [EmailAddress(ErrorMessage = "Vous devez saisir une adresse mail valide \"Ex: mail@domaine.com\"")]
    public string SubEmail { get; set; }
}

布局视图渲染部分视图" _subscribe"这里包含注册时事通讯的表格:

<body>
    <div id="container">
        <header>
            <div id="banner">
                @Html.Partial("~/Views/Soscom/_Subscribe.cshtml")
            </div>
        ....
</body>

我的部分观点&#34; _订阅&#34; :

@model SoscomAppMvc.Models.SubscribeModel

@using (Html.BeginForm("Subscribe", "Soscom"))
{
    @Html.TextBoxFor(m => m.SubEmail, new { placeholder = "Email pour s'inscrire à la newsletter", @class = "subscribebox", maxlength = "70" })
    @Html.ValidationMessageFor(m => m.SubEmail)
    <input class="subscribeBtn" type="submit" value="s'inscrire">
}

我使用HttpGet Action方法将模型发送到局部视图&#34; _subscribe&#34; :

    [HttpGet]
    public PartialViewResult Subscribe()
    {   
        return PartialView("_Subscribe", new SubscribeModel());
    }

但是当我使用HttpPost Action轰鸣声时,我得到了一个没有布局页面的局部视图?

    [HttpPost]
    public ActionResult Subscribe(SubscribeModel subscribe)
    {
        if (!ModelState.IsValid) 
            return PartialView("_Subscribe", subscribe);
        return View(subscribe);
    }

问题:

有没有办法在当前视图中包含Post响应? 如果我出错或理解错误,请告诉我。

1 个答案:

答案 0 :(得分:0)

Partials只是在多个视图中重用一些HTML的一种方法。将页面发送给用户并在其浏览器中呈现后,页面上有一个或多个部分的事实并不重要。如果你做一个传统的POST,它会改变整个页面,因为这是事情的运作方式。

我认为您要实现的目标是进行POST并仅更改页面的部分,而不会提示整页重新加载。这需要AJAX。您需要使用JavaScript捕获和处理表单的submit事件,发出POST请求,使用AJAX序列化表单数据,最后在成功时用返回的HTML替换一些DOM节点的内容。