我是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响应? 如果我出错或理解错误,请告诉我。
答案 0 :(得分:0)
Partials只是在多个视图中重用一些HTML的一种方法。将页面发送给用户并在其浏览器中呈现后,页面上有一个或多个部分的事实并不重要。如果你做一个传统的POST,它会改变整个页面,因为这是事情的运作方式。
我认为您要实现的目标是进行POST并仅更改页面的部分,而不会提示整页重新加载。这需要AJAX。您需要使用JavaScript捕获和处理表单的submit事件,发出POST请求,使用AJAX序列化表单数据,最后在成功时用返回的HTML替换一些DOM节点的内容。