如何为MVC论坛设置动作?

时间:2013-12-22 20:34:02

标签: asp.net-mvc razor

我想在用户提交表单时设置表单的操作。我没有重新加载当前页面,而是将其引导到控制器来处理请求。如何使用视图中的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"));
    }

1 个答案:

答案 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

相关问题