2015-06-18 15 views
0

我有一個強類型爲一個模型但具有表單以發佈到不同模型的視圖。我需要在用戶離開筆記空白時發回驗證錯誤,但無法弄清楚。下面是該視圖中的表格:在沒有模型的情況下在MVC中拋出驗證錯誤

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 

    <div class="col-md-12 col-xs-12"> 
     <div class="form-group"> 
      @*@Html.HiddenFor(model => model.TicketId)*@ 
      @Html.Label("New Note", new { @class = "control-label" }) 
      @Html.TextArea("Note", new { cols = 600, @rows = 5 }) 
     </div> 

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Add" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
} 

這裏是我的控制器代碼:

[HttpPost] 
public ActionResult EditUserTicket(Guid id, string Note) 
{ 
    if (Note != "") 
    { 
     AddTicketNote(Guid.Parse(Session["LoggedUserID"] as string), id, Note, true); 
    } 

    return RedirectToAction("EditUserTicket", id); 
} 
+2

我強烈建議鍵入它完全,避免這種可能的話。只需創建一個NoteViewModel並將其實例添加到父級擁有的任何模型中。然後只需使用必需的屬性和ValidationMessageFor作爲一個簡單的解決方案。 – br4d

+0

@ br4d這是一個我正在創建的幫助臺軟件。 我之所以沒有這麼做的原因是上面是一個Ticket表,附加到強制鍵入視圖的模型。然後下面的表格是附在票上的所有票據清單。中間的這種形式使用戶可以向票證添加新的票據。 有沒有一種方法,我仍然可以做一個視圖模型? – djblois

+0

@djblois對我的答案有幫助嗎? –

回答

0

有幾種方式來實現這一目標。 這是我會做:

查看:

@using (Html.BeginForm()) 
{ 
@Html.AntiForgeryToken() 

<div class="col-md-12 col-xs-12"> 
    <div class="form-group"> 
     @*@Html.HiddenFor(model => model.TicketId)*@ 
     @Html.Label("New Note", new { @class = "control-label" }) 
     @Html.TextArea("Note", new { cols = 600, @rows = 5, id = "noteArea" }) 
    </div> 

    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input id="submitBtn" type="submit" value="Add" class="btn btn-default" /> 
     </div> 
    </div> 
</div> 
} 
<script> 
$(function() { 

    $('#submitBtn').click(function (e) { 
     if($('#noteArea').val() == "") 
     { 
      e.preventDefault(); 
      alert("Please enter a note"); //You could append some HTML somewhere (I dont like alerts) 
     } 
    }); 
}); 
</script> 

控制器:

[HttpPost] 
    public ActionResult EditUserTicket(Guid id, string Note) 
    { 
     if (Note != "") 
     { 
      AddTicketNote(Guid.Parse(Session["LoggedUserID"] as string), id, Note, true); 
     } 
     TempData["NoteError"] = true; 
     return RedirectToAction("EditUserTicket", id); 
    } 

然後在你的EditUserTicket ActionMethod檢查TempData["NoteError"]不爲空,並檢查值。如果它不爲空並且爲真,那麼該筆記是空的。

在我看來,你不應該只是做客戶端或服務器端。如果你打算做驗證,你應該做它的客戶端服務器。

-1

你總是可以使用客戶端jQuery進行驗證,隨着asp.net mvc。

確保在BundleConfig.cs jquery.validate包含並在佈局中調用捆綁包。

那麼在你看來

$("#myForm").submit(function (e) { 
     e.preventDefault(); 
     var validator = $("#myForm").validate().form(); 
     if (validator) { 
       //do something you can alway send to server and do another validation 
     } 
    }); 

不要忘記你的形式@ Html.ValidationMessage你想要的每個字段錯誤出現

+0

如果他想讓他總能發送ajax回服務器並進行另一個驗證 – DarkVision

相關問題