2014-12-05 6 views
0

Я делаю небольшую форму, которая позволяет пользователю подтвердить, что он reallly хотите удалить этот пункт, но я не могу получить идентификатор на контроллере ...Простая модель привязки данных в форме Html

@using (Html.BeginForm("Delete", "Home", FormMethod.Post)) 
     { 
      @Resources.Audit.Delete_Ask_Confirmation_Text 
      @Html.HiddenFor(model => model.audit.id) 
      <button type="submit" class="btn btn-warning"> 
       <i class="glyphicon glyphicon-trash spaceAfterIcon"></i> @Resources.Audit.Delete_Ask_Confirmation_Button 
      </button> 
     } 

=> В ходе проверки:

public int Id { get; set; } 

Html

<div> 
    <form action="/Audit/Home/Delete" method="post" novalidate="novalidate">Lore Ipsum 
     <input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="audit_Id" name="audit.Id" type="hidden" value="2"> 
     <button type="submit" class="btn btn-warning"> 
      <i class="glyphicon glyphicon-trash spaceAfterIcon"></i> Please confirm the delete 
     </button> 
    </form> 
</div> 

контроллер:

[HttpPost] 
     public ActionResult Delete(int id) 
     {// always null} 

Параметр id всегда равен нулю.

Я попытался изменить метод подписи:

Delete(int audit_Id), 
Delete(int id), 
Delet(string id), 
Delete(string audit_id), 
... 

Спасибо за вашу помощь!

+0

В чем вопрос ?? –

+0

@Ahmedilyas: Я не могу получить идентификатор на контроллере, r всегда null или Exception – clement

+0

это потому, что у вас есть модель и объект внутри того, который затем имеет идентификатор. имя параметра именования/POSTing не является правильным, поэтому связующее устройство модели не может привязать свойство POST'd к параметру в методе действий. Я бы открыл скрипач и посмотрел, что этот параметр публикуется. или даже открыть панель инструментов разработчика и узнать имя DOM этого свойства, а затем использовать его в методе действий. –

ответ

2

Если вы пытаетесь использовать поля формы и вспомогательные функции Html, вам необходимо, чтобы ваша модель была параметром метода контроллера Delete. Имея только идентификатор является более правильным, и вы можете убедиться, что она проходит через, изменив форму декларации и добавления объекта, отображающая дополнительные значения маршрута:

@using (Html.BeginForm("Delete", "Home", new { id = Model.audit.id }, FormMethod.Post))} 

Вы также сможете удалить скрытый тип входа.

+0

хорошо, но почему это правильнее, чем положить скрытые фили? – clement

+0

Комментарий о правильности был больше связан с использованием всей модели в качестве параметра в вашем контроллере, когда вам нужен только идентификатор, правильнее передать только идентификатор. В любом случае, я не любитель скрытых полей, но имеет смысл (в моей голове) передать идентификатор в URL более спокойным образом. – DoctorMick

+0

Я согласен с @DoctorMick, но форма может стать удобной, когда вы используете токен анти-подделки. – Marthijn

0

Ссылка на модель MVC обрабатывает параметры по имени. Ваше имя скрыто вход

name="audit.Id" 

так что ваши действия должны быть

public ActionResult Delete(audit model){ 
    var id = model.id; 
} 

ИЛИ

@ ответ DoctorMick в.

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