我正在尝试渲染包含简单html表单的局部视图。我想从控制器渲染表单,因为我处理来自重载控制器方法的回发。我试过@ Html.Action(“ContactForm”),但是我得到了一个例外,因为子操作无法重定向。
我的控制器:
public ActionResult Index()
{
return View();
}
[HttpGet]
public ActionResult ContactForm()
{
return PartialView(new ContactForm());
}
[HttpPost]
public ActionResult ContactForm(ContactForm Contact)
{
return RedirectToAction("FormResults", new { ContactForm = Contact });
}
public ActionResult FormResults(ContactForm Contact)
{
return PartialView(Contact);
}
我的表格:
@using(Html.BeginForm())
{
<h2>Contact Form</h2>
<div class="input-group">
<h4>@Html.LabelFor(m => m.FirstName, "First Name")</h4>
@Html.TextBoxFor(m => m.FirstName, new { @class = "form-control", @placeholder = "First Name" })
</div>
<div class="input-group">
<h4>@Html.LabelFor(m => m.LastName, "Last Name")</h4>
@Html.TextBoxFor(m => m.LastName, new { @class = "form-control", @placeholder = "Last Name" })
</div>
<div class="input-group">
<h4>@Html.LabelFor(m => m.Email, "Email")</h4>
@Html.TextBoxFor(m => m.Email, new { @class = "form-control", @placeholder = "Email", @type = "text" })
</div>
<input type="submit" class="btn btn-info" value="Submit" />
}
任何有关如何实现这一目标的帮助将不胜感激。
答案 0 :(得分:1)
尝试用div和某个id包围表单并使用:
@using(Ajax.BeginForm("ContactForm","YourController",new AjaxOptions()
{
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "yourCertainId",
HTTPMethod = "POST"
})
和你的ActionMethod:
[HttpPost]
public ActionResult ContactForm(ContactForm Contact)
{
return Partial("YourPartialName", Contact });
}
确保在视图底部包含了捆绑jqueryval。
你不需要第二个控制器方法“FormResults”
答案 1 :(得分:0)
这样的事情不适合你吗?
我认为你不需要重定向。
[HttpPost]
public ActionResult ContactForm(ContactForm Contact)
{
return PartialView("FormResults", Contact);
}
这使用
PartialView(string viewName, object model)
Controller类中PartialView方法的重载。
这允许您使用与ActionResult的方法名称不匹配的视图。
同样适用于简单的“查看”方法。