MVC3 текстовое поле представляет нулевое значение? - PullRequest
0 голосов
/ 25 января 2012

Я создаю динамический список текстовых полей. когда пользователь отправляет значение в полях, возвращаются нулевые. Я думаю, что что-то упустил.

Это моя модель продукта:

public class EnqProduct
{
    public string Id { get; set; }
    public string Product { get; set; }
    public string Quantity { get; set; }
}

Это модель страницы, которая включает в себя список выше.

public IList<EnqProduct> EnqProduct { get; set; }

Вот как я настраиваю модель:

IList<EnqProduct> items2 = Session["enquiry"] as IList<EnqProduct>;
var EnquiryModel = new Enquiry { 
       EnqProduct = items2  
};      
return View(EnquiryModel);

и вот как я отображаю поля:

foreach (var item in Model.EnqProduct)
{
 <tr>
   <td>
      <span class="editor-field">
         @Html.TextBox(item.Id, item.Product)
         @Html.ValidationMessageFor(m => m.A1_Enquiry)
      </span>  
      <br><br>                              
    </td>
    <td>
      <span id = "field" class="editor-field">
         @Html.TextBox(item.Id, item.Quantity)
      </span>      
      <br><br>                              
    </td>
  </tr>
 }

Когда пользователь отправляет поля, возвращаются к контроллеру null?

1 Ответ

2 голосов
/ 25 января 2012

Я бы порекомендовал вам использовать шаблоны редактора и заменить цикл foreach следующим:

@model Enquiry
<table>
    <thead>
        <tr>
            <th>product name</th>
            <th>quantity</th>
        </tr>
    </thead>
    <tbody>
        @Html.EditorFor(x => x.EnqProduct)
    </tbody>
</table>

, а затем определите шаблон редактора, который будет автоматически отображаться для каждого элемента коллекции EnqProduct (~/Views/Shared/EditorTemplates/EnqProduct.cshtml):

@model EnqProduct
<tr>
    <td>
        @* We include the id of the current item as hidden field *@
        @Html.HiddenFor(x => x.Id)

        <span class="editor-field">
            @Html.EditorFor(x => x.Product)
            @Html.ValidationMessageFor(x => x.Product)
        </span>  
    </td>
    <td>
        <span id="field" class="editor-field">
            @Html.EditorFor(x => x.Quantity)
        </span>      
    </td>
</tr>

Теперь при отправке формы вы получите правильные значения:

public class HomeController: Controller
{
    public ActionResult Index()
    {
        var model = new Enquiry();
        model.EnqProduct = ...
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(Enquiry model)
    {
        // the model.EnqProduct will be correctly populated here
        ...
    }
}

Что касается правильного формата проводника, которого связыватель модели по умолчанию ожидает для ваших полей ввода, я бы порекомендовал вам взглянуть на следующую статью . Это позволит вам легче отлаживать проблемы в функции, если какая-то модель заполнена неправильно. Достаточно взглянуть с помощью FireBug и имени отправляемых значений, и вы сразу узнаете, в порядке они или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...