2015-06-18 5 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 Это для программного обеспечения справочной службы, которое я создаю. Причина, по которой я не делал этого, - это таблица билета, прикрепленная к модели, которая строго типизирована для представления. Затем под формой находится список всех заметок, прикрепленных к этому билету. Эта форма посередине такова, что пользователь может добавить новую заметку в билет. Есть ли способ, который я могу сделать с моделью? – 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"] не равно нулю и проверьте значение. Если это не null и true, то примечание пусто.

На мой взгляд, вы не должны просто делать клиентскую или серверную сторону. Если вы собираетесь сделать валидацию, вы должны сделать это клиент и сервер.

-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

Смежные вопросы