Передача модели представления в ASP.NET MVC 3 Edit Controller - PullRequest
1 голос
/ 11 июля 2011

При передаче модели представления (как показано ниже) в представление, как я могу гарантировать, что создаваемые мной флажки (сопоставленные с элементом "Продукт" здесь) передаются обратно в контроллер?

Ниже я включил мою модель представления и контроллер продукта "post".

К сожалению, при отправке обратно на контроллер «Продукты» не имеют значения.

namespace MyProject.Models
{
    public class ChartViewModel
    {
        public Chart ChartItem { get; set; }
        public IEnumerable<Product> Products { get; set; }
    }
}

Контроллер:

    [Authorize]
    [ValidateInput(false)]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(ChartViewModel objChartViewModel)
    {

        if (!TryUpdateModel(objChartViewModel))
        {
            return View(objChartViewModel);
        }
        else
        {

        } return View("Details", objChartViewModel);

    }

Как флажки добавляются в мое представление, сопоставленные с объектом «Продукт» в моей модели представления:

@{
   foreach (MyProject.Models.Product objProduct in Model.Products)
 {
            @Html.CheckBox("product" + objProduct.Id, Model.ChartItem.ChartProducts.Select(t => t.ProductId).Contains(objProduct.Id));
            @String.Format("{0} {1}", objProduct.Manufacturer.Name, objProduct.Name);<br />
 }
}

1 Ответ

1 голос
/ 18 июля 2011

Вы можете отправлять свои списки (IEnumerable<T>) вниз, но когда они не возвращаются к контроллеру.Единственные свойства вашей ViewModel, которые имеют значения, - это свойства с точно совпадающими элементами в коллекции форм.Поэтому добавьте свойства в вашу ViewModel, например SelectedProductID.

. Это устанавливает раскрывающийся список, который отправляет выбранное значение обратно в контроллер:

<div class="editor-field"> 
    @Html.DropDownListFor(m => m.SelectedEmployeeID,
        new SelectList(Model.EmployeeList, "EmployeeID", "EmployeeName"), "--Please select an Employee--")
    @Html.ValidationMessageFor(model => model.SelectedEmployeeID)
</div>

Примечание: свойство устанавливаетсяравно SelectedEmployeeID, но это происходит от EmployeeList.

В вашем случае многие значения находятся в коллекции (только «проверенные» флажки отправляются в сообщении), так что вы можете сделать:

string value = collection["myProductID"];

если его там проверено.

извините за беспорядок, это было немного спешно.См. Это для получения дополнительной информации:
Форма записи MVC 3 и постоянные данные модели

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