#asp.net-mvc-3 #checkbox
#asp.net-mvc-3 #флажок
Вопрос:
У меня есть форма, в моей форме пользователь может заполнить свои данные и выбрать свои интересы, которые указаны в флажке. Я помещаю раздел интересов в форму как частичное представление.
Форма, имеющая,
- Имя
- Дата рождения
- Поместите
- Интересы (список флажков)
У меня есть модель, в которой есть все поля Name, BirthDay, Place. И еще одна модель для LookingFormodel.
Теперь, когда я отправляю форму. все поля, такие как name, Birthday и palce, отправляются в модель, но я не получаю список выбранных флажком элементов.
Как я могу получить значения флажка в форме отправки?
Комментарии:
1. Можете ли вы показать нам какой-нибудь код? ASP.NET MVC 3 прекрасно умеет автоматически сопоставлять поля вашей формы с моделью. Поскольку все дело в списке интересов, пожалуйста, покажите соответствующие части представления и модели.
Ответ №1:
Это кажется хорошим кандидатом для шаблонов редактора. Как всегда, мы начинаем с разработки модели представления:
public class MyViewModel
{
public string Name { get; set; }
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? DateOfBirth { get; set; }
public string Place { get; set; }
public IEnumerable<InterestViewModel> Interests { get; set; }
}
public class InterestViewModel
{
public int Id { get; set; }
public string InterestLabel { get; set; }
public bool IsSelected { get; set; }
}
затем контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new MyViewModel
{
Name = "john",
DateOfBirth = new DateTime(1990, 1, 1),
Place = "Spain",
Interests = new[]
{
new InterestViewModel { Id = 1, InterestLabel = "cinema" },
new InterestViewModel { Id = 2, InterestLabel = "sport" },
new InterestViewModel { Id = 3, InterestLabel = "books" },
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
// TODO: process the results here, the view model will be
// correctly bound
....
}
}
затем view ( ~/Views/Home/Index.cshtml
)
@model MyViewModel
@using (Html.BeginForm())
{
<div>
@Html.LabelFor(x => x.Name)
@Html.EditorFor(x => x.Name)
</div>
<div>
@Html.LabelFor(x => x.DateOfBirth)
@Html.EditorFor(x => x.DateOfBirth)
</div>
<div>
@Html.LabelFor(x => x.Place)
@Html.EditorFor(x => x.Place)
</div>
<h2>Interests</h2>
@Html.EditorFor(x => x.Interests)
<button type="submit">OK</button>
}
и соответствующий шаблон редактора, который будет отображаться для каждого элемента коллекции интересов ( ~/Views/Home/EditorTemplates/InterestViewModel.cshtml
):
@model InterestViewModel
@Html.LabelFor(x => x.IsSelected, Model.InterestLabel)
@Html.CheckBoxFor(x => x.IsSelected)
@Html.HiddenFor(x => x.Id)
@Html.HiddenFor(x => x.InterestLabel)
Комментарии:
1. привет, как вы ссылаетесь
InterestViewModel.cshtml
наIndex.cshtml
то, что я точно следую тому, что вы сказали, но я получаю только значения вместо флажков.. чего мне не хватает??2. Это работает по соглашению: внутри модели представления
Interests
свойство имеет типIEnumerable<InterestViewModel>
=> asp.net mvc будет искать файл/Views/Shared/EditorTemplates/InterestViewModel.cshtml
, потому что это имя типа, используемое в коллекции.3. да, точно, спасибо .. всего секунду назад я искал, что
EditorTemplates
я не знал об этом..