我想在用户提交表单时设置表单的操作。我没有重新加载当前页面,而是将其引导到控制器来处理请求。如何使用视图中的Razor引擎来完成此操作。
<h2>@Html.DisplayFor(model => model.Title)</h2>
<p>@Html.Markdown(Model.Body)</p>
@if (Request.IsAuthenticated)
{
using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.Id)
{
Model.ReplyId = ViewBag.Thread;
Model.Body = "";
}
@Html.HiddenFor(m => m.ReplyId);
<div class="form-horizontal">
<h4>Reply</h4>
<hr />
@Html.ValidationSummary(true)
<div class="form-group">
<div class="col-md-10">
@Html.EditorFor(m => m.Body, "Markdown")
<div id="mdFormatted"></div>
</div>
</div>
<div><input type="submit" value="Reply" class="btn btn-default" /></div>
</div>
}
}
else
{
Response.Redirect(Url.Action("Index"));
}
答案 0 :(得分:1)
你可以这样做:
@using (Html.BeginForm("action", "controller"))
{
}
还有一个重载指定是否应通过GET或POST发送表单:
@using (Html.BeginForm("action", "controller", FormMethod.Post))
{
}
作为一个单独的旁边,你并没有真正遵循MVC模式与其余代码的流程。具体来说,您不应该从视图本身重定向到不同的视图,因为这正是控制器负责的。在你的例子中,做这样的事情会更好:
public ActionResult YourAction()
{
if (!Request.IsAuthenticated)
return RedirectToAction("Index");
return View();
}
这允许您将不应该在视图中的逻辑移动到控制器,这既简化了视图又强制执行MVC模式。如果您要将用户重定向到登录操作,另一个注意事项是调查使用AuthorizeAttribute。