2015-08-24 8 views
-1

Я не закаленный передний конец разработчика, так что я борюсь с этим простым вопросом ...MVC4 Checkbox обратно к контроллеру

У меня есть модель, относящаяся к моей базе данных, которая представляет собой список «вещей ». В моем представлении я добавляю флажок для каждой строки в списке. Для каждого отмеченного элемента я хочу добавить строку в ассоциативную таблицу. ... Довольно простая/стандартная логика. Я разработал свои имена флажков, поэтому я знаю, с каким я имею дело, так что это не моя проблема. То, с чем я борюсь, - это получить видимость флажков в моем контроллере. Проще говоря - что/как я могу передать эти флажки контроллеру, чтобы я мог их пропустить и вызвать мою хранимую процедуру для вставки строк?

Добавление моего кода, но я не думаю, что моя проблема связана с синтаксисом - я не понимаю, как я действительно отправляю список обратно в метод контроллера. Я не хочу добавлять его в мою модель, которая является результатом вызова хранимой процедуры, чтобы получить справочную информацию о вещах, которые я хочу добавить. Чтобы модифицировать эту модель, нужно было бы ввести «материал» переднего плана (что выбрал пользователь), что не имеет отношения к моей модели, которая представляет собой список всех связанных элементов. Мне нужен только список идентификаторов тех, которые мы хотим рассказать в нашей ассоциативной таблице. Я думаю, что я ищу javascript, jquery или json, которые будут генерировать список для меня, поэтому я мог бы отправить его на контроллер, когда нажата кнопка «Сохранить и продолжить» - это та часть, которую я не знаю как сделать.

@model PagedList.IPagedList<LMN.Models.GetRelatedEquipmentByEquipmentItemCategory_Result> 
@using PagedList.Mvc; 

<link href="~/Content/PagedList.css" rel="stylesheet" type="text/css" /> 

@{ 
    ViewBag.Title = "GetRelatedEquipment"; 
} 

<h2>GetRelatedEquipment</h2> 

@*@{var EquipmentItemCategoryId = ViewContext.RouteData.Values["EquipmentItemCategoryId"].ToString(); }*@ 

<table> 

    <tr> 
     <th> 
       Select 
      </th> 
     <th> 
      @Html.DisplayNameFor(model => model.FirstOrDefault().RelatedCategory) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.FirstOrDefault().GroupName) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.FirstOrDefault().MedicareCoverageLikely) 
     </th> 
    </tr> 
    @{ var i = 0; } 
    @foreach (var item in Model) 
    { 

     <tr> 
      <td class="border"> 
       @Html.CheckBox("selectedObjects" + item.RelatedCategoryId) 
        @*@Html.CheckBox("selectedObjects" + item.RelatedCategoryId, new { value = "selectedObjects" + item.RelatedCategoryId })*@ 
        @*@Html.Hidden("check[" + i.ToString() + "].RelatedCategoryId", item.RelatedCategoryId)*@ 

      </td> 
      <td class="border"> 
       @Html.DisplayFor(modelItem => item.RelatedCategory) 
      </td> 
      <td class="border"> 
       @Html.DisplayFor(modelItem => item.GroupName) 
      </td> 
      <td class="border"> 
       @Html.DisplayFor(modelItem => item.MedicareCoverageLikely, true) 
      </td> 
       @Html.HiddenFor(modelItem => item.RelatedCategoryId) 
     </tr> 
     i++; 
    } 
</table> 
<table> 
    <tr> 
     <td> 
      @*@using (Html.BeginForm("GetRelatedSeatSupport", "Letter", new { model => model.FirstOrDefault().EquipmentItemCategoryId = 5 })) 
      {*@ 
      @using (Html.BeginForm("TryThis", "Letter")) 
      { 
       <p> 
        <input type="submit" value="Save and Continue" /> 
       </p> 
      } 

      @*@Html.ActionLink("Save and Continue", "GetRelatedSeatSupport", new { EquipmentItemCategoryId = 7 })*@ 
     </td> 
    </tr> 
</table> 
+1

действительно разместите свой код, после чего ваш застрявший, сообщество сможет вам помочь. – jero

+1

_I разработал свои имена, и я знаю, с каким я имею дело, так что это не моя проблема?Хорошо, что это, безусловно, ваша проблема. Показать свой код –

+0

добавил мой код выше – SherryA

ответ

0

Вы генерируете флажки, которые вообще не имеют отношения к вашей модели. Если вы осмотрите HTML вы генерирующие вы увидите (если у вас есть 2 объекта, где значение RelatedCategoryId являются 1 и 2 соответственно)

<input type="checkbox" name="selectedObjects1" .... value="True" /> 
<input type="hidden" name="selectedObjects1" .... value="False" /> 
<input type="checkbox" name="selectedObjects2" .... value="True" /> 
<input type="hidden" name="selectedObjects2" .... value="False" /> 

Вы модель не имеет логические свойства с именем selectedObjects1 и selectedObjects2 так бы не связывают на что угодно.

В @Html.CheckBox() и @Html.CheckBoxFor() методы для связывания с boolean свойств не для связывания с int.

Далее, ваши флажки даже не в форме, поэтому никогда не будут переданы методу контроллера в любом случае.

Непонятно, что именно вы хотите сделать, поскольку не указали свои методы управления или ваши модели, но при условии, что вы показываете список оборудования и что нужно отправить обратно выбранным элементам, затем начните с модели представления, представляющей то, что вы хочу отобразить/редактировать в окне

public class EquipmentVM 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    .... // other properties 
    public bool IsSelected { get; set; } 
} 

Затем в контроллере, инициализировать List<EquipmentVM> карты вам модель данных для сбора вида модели и передать его мнению

@model List<EquipmentVM> 
@using Html.BeginForm()) 
{ 
    <table> 
    .... // table headers 
    <tbody> 
     @for(int i = 0; i < Model.Count; i++) 
     { 
     <tr> 
      <td> 
      @Html.CheckBoxFor(m => m[i].IsSelected) 
      @Html.HiddenFor(m => m[i].ID) 
      </td> 
      <td>@Html.DisplayFor(m => m[i].Name)</td> 
      .... // other display properties of your model 
     <tr> 
     } 
    </tbody> 
    </table> 
    <input type="submit" ... /> 
} 

Затем в POST меня thod

public ActionResult Edit(List<EquipmentVM> model) 
{ 
    IEnumerable<int> selectedIDs = model.Where(e => e.IsSelected).Select(e => e.ID); 
    // do something with the selected ID's 
} 
+0

Спасибо. Я знаю, что мои флажки не связаны с моей моделью, и это часть моей проблемы, но моя модель создается из фреймворка сущности, который считывает базу данных и выбранные флажки (или нет), просто говорит мне добавить отношения к базе данных - таким образом, почему я говорю, что они действительно относятся только к интерфейсу ... поэтому мне трудно понять, как я модифицирую свою модель, чтобы, когда и если я повторно создаю ее через сущность framework, Я не потеряю свои модификации ... собираюсь учиться больше, но я очень ценю ваши комментарии! – SherryA

+0

Поскольку мои флажки не были в форме, это также было частью моей проблемы с пониманием - у меня есть серия страниц. Html.BeginForm на самом деле так, когда нажата кнопка отправки (с этой страницы), навигация перейдет на следующую страницу (форму). У меня возникли проблемы с пониманием того, как кодировать серию навигационных страниц. Любая помощь/ссылки, которые вы можете предоставить в этой области, будет оценена по достоинству. – SherryA

+0

Вы не изменяете свою модель данных, создаете модель представления. Я предлагаю вам начать с [Что такое ViewModel в MVC?] (Http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc). У каждого вида create должна быть связанная модель представления, особенно когда она предназначена для редактирования данных. И такие инструменты, как [automapper] (https://github.com/AutoMapper/AutoMapper), позволяют легко сопоставлять модели данных и модели просмотра. –

0

вы должны проверить, проверяются ли флажок или нет, и прикрепить значение к вашей модели и отправить обратно к контроллеру либо Ajax вызов или которые когда-либо образом отправка обратно модальности.

var chk = $('#checkboxid').is(':checked') ? "Y" : "N"; 
Смежные вопросы