2013-09-27 3 views
0

EDIT: Кажется, я подошел к этой проблеме неправильно. Я объясню, что мне нужно, чтобы случитьсяМодель пуста после сообщения

Вот моя модель:

public class Items 
{ 
    public string ItemName { get; set; } 
    public string Type { get; set; } 
    public bool Picked { get; set; } 
} 

Это мой контроллер:

public class InvoiceController : Controller 
    { 
     [HttpGet] 
     public ActionResult Index() 
     { 
      using (TPGEntities context = new TPGEntities()) 
      { 
       List<Items> result = (from a in context.IV00101 
             select new Items { ItemName = a.ITEMDESC, Type = a.ITEMNMBR, Picked = false }).Take(10).ToList(); 

       return View(result); 
      } 
     } 

     [HttpPost] 
     public ActionResult Index(string searchTerm, IList<Items> model) 
     { 
      return View(); 
     } 
    } 

И мое мнение:

@model IList<SampleEnterprise.Models.Items> 

@{ 
    ViewBag.Title = "Repair Invoicing"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Repair Invoicing</h2> 

    @using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "partsList" })) 
    { 
     <input type="search" name="searchTerm" /> 
     <input type="submit" value="OK" /> 

     <div id="partsList"> 

      @foreach (var item in Model) 
      { 
       <h1>@item.ItemName</h1> 
       <div>@item.Type</div> 
       <div> 
        @if (@item.Picked) 
        { 
         <img src="~/Images/checkbox.png" /> 
        } 
       </div> 
      } 
     </div> 
    } 

В основном здесь это то, что мне нужно:

  1. Пользователь переходит на страницу. В текстовом поле, которое у меня нет в настоящее время на моем представлении, пользователь будет вводить число. Этот номер будет использоваться для поиска и возврата данных из фреймворка сущности. Этот список данных необходимо временно сохранить.

  2. Я буду использовать для каждого цикла в бритве отображение временных данных.

  3. В текстовом поле поиска пользователь будет искать временные данные для элемента itemnumber.

  4. Если номер позиции выходит из временных данных, установите значение true.

  5. Повторяйте до тех пор, пока для всех выбранных свойств не будет установлено значение true.

+0

Вы можете публиковать только 'Form Fields' как' input', 'select' и т. Д. Следовательно, вы делаете' @ Html.TextBoxFor (x => x.ItemName) 'или' @ Html.HiddenFor (x => x. ItemName) ' –

ответ

2

Вы не создаете никаких элементов ввода для Items, поэтому ничего не отправляется назад.

+0

Мне не нужны поля ввода, так как пользователь не будет редактировать. Единственный раз, когда модель будет изменена, - это мой контроллер. – broke

+0

Итак, почему вы хотите, чтобы ваши товары были отправлены назад? HTTP не имеет статуса. Вы не можете получить элементы, отображаемые на просмотре, отправленном назад, если вы не добавляете, например, скрытые элементы ввода для каждого из них. Просто загрузите элементы из базы данных в метод HttpPost. – CodeCaster

+0

Потому что я хочу, чтобы текстовое поле поиска просматривало мою модель. Мне нужно только один раз извлекать данные из базы данных. – broke

2

Если вы хотите, чтобы эти поля были возвращены, вам нужно было бы создать скрытые поля для них.

@Html.HiddenFor(x => x.ItemName) 

Тогда они будут возвращены, как и ожидалось.

Чтобы быть честным, хотя я бы, вероятно, просто заполнил модель в методе действий, так как действительно все, что вы хотите вернуть в сообщение, это поисковый запрос.

2

<h1>@item.ItemName</h1> и <div>@item.Type</div> просто превращаются в простой текст (например, <h1>Item</h1>) и не имеют привязки к модели после преобразования в HTML. Вам нужно будет хранить их в чем-то, что может понять действие контроллера, используя @Html.HiddenFor(x => x.ItemName) или создав собственный HTML-помощник, например, @ Html.DivFor.

1

Я видел ошибку, и все, что вам нужно добавить, - это скрытое поле, чтобы оно могло получить значение. Вы можете сделать что-то вроде @Html.HiddenFor(x => x.ItemName), так как вы делаете это внутри формы.

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