2013-12-22 46 views
0

我想在用戶提交時設置表單的動作。而不是重新加載當前頁面,我想將它引導到控制器來處理請求。我如何在視圖內使用Razor引擎來做到這一點。如何爲MVC論壇設置操作?

<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

你能做到這一點,像這樣:

@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進行研究。

+0

謝謝!我知道這很簡單。 –

+0

@NoahR不客氣。 –