2012-05-30 3 views
0

У меня возникли проблемы с выяснением того, как редактировать элементы таблицы на веб-странице и отправлять их обратно на сервер. (на самом деле, в этом случае, я просто хочу, чтобы пользователь выбирал флажки, как будто они выбирают несколько элементов, но это всего лишь импликация).Редактируемый стол в MVC

Проблема заключается в том, что, пока представление отображается на веб-странице, в HttpPost, picSelections имеет значение NULL.

Это в верхней части моего обзора:

@model IEnumerable<CarShow.lmit_pics> 

@using (Html.BeginForm()) 
{  
<div style="width:100%; height:60px; "> 
<input type="submit" value="Add Selected Photo(s) to Survey" /> 
</div> 

    for (int i = 0; i < Model.Count(); i++) 
    { 
     var item = Model.ElementAt(i); 
    <div style="width:296px; float:left"> 

      <div style="float:left; width:200px; margin-bottom:18px"> 

       @{string cropped = "../../../Content/Images/" + Html.DisplayFor(modelItem => item.picname).ToString() + "?" + Html.DisplayFor(modelItem => item.version).ToString(); 
       } 
       <img alt="picture" class="pic-size" src="@cropped" /> 
       <br /> 
        @Html.EditorFor(modelItem => item.brand) 
      </div> 

</div> 
     }  
} 
</div> 

Это в контроллере:

public ActionResult AddSurveyPic(string id) 
{ 
    var validPicSummaries = (IEnumerable)(from x in db.lmit_pics where x.enabled == 1 select x); 
    return View((IEnumerable)validPicSummaries); 
} 

[HttpPost] 
public ActionResult AddSurveyPic(IEnumerable<CarShow_MVC.lmit_pics> picSelections) 
{ 
     // Save data here 
} 

Спасибо.

+0

Является ли редактируемый стол внутри POST-способным '

'? –

+0

Думаю, что так. Я просто добавил больше кода. Я еще не добавил редактируемые поля, но я полагаю, что это не должно мешать сообщению. Может, я сделал это неправильно? – Dave

+0

Если нет редактируемых полей, не будет ничего закодированного для публикации на действие контроллера –

ответ

2

Не записывайте петли в своих представлениях. Я бы порекомендовал вам использовать шаблоны редактора:

@model IEnumerable<CarShow.lmit_pics> 

@using (Html.BeginForm()) 
{  
    <div style="width:100%; height:60px; "> 
     <input type="submit" value="Add Selected Photo(s) to Survey" /> 
    </div> 
    @Html.EditorForModel() 
} 

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

@model CarShow.lmit_pics 

<div style="width:296px; float:left"> 
    <div style="float:left; width:200px; margin-bottom:18px"> 
     @{string cropped = "../../../Content/Images/" + Html.DisplayFor(x => x.picname).ToString() + "?" + Html.DisplayFor(x => x.version).ToString(); } 
     <img alt="picture" class="pic-size" src="@cropped" /> 
     <br /> 
     @Html.EditorFor(x => x.brand) 
    </div> 
</div> 

Вы также можете прочитать following article, чтобы лучше понять соглашения об именах, которые используют модель по умолчанию Связыватель при связывании коллекций и словарей.

+0

'Не записывайте петли в своих взглядах' - Действительно? Это был вид хлеба с маслом MVC1 или, по крайней мере, масла. Все изменилось? –

+0

Да, вещи сильно изменились с введением сильно типизированных помощников и шаблонов редактора/отображения в ASP.NET MVC 2. С этого момента вам больше не нужно писать циклы в представлениях. –

+0

Я так новичок в MVC, шаблоны редакторов для меня совершенно новые. Время загрузки теперь намного быстрее. MVC потрясающе! Одна вещь, однако, HttpPost все еще не догоняет результат. Я исследую это, но знаете ли вы, что еще я могу сделать неправильно? – Dave

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