2015-07-08 3 views
2

У меня есть вид, где пользователи будут выбирать значение с помощью радиообъективов. Моя проблема заключается в том, что, как только пользователь нажимает кнопку submit, значения в модели View (в моем контроллере) равны нулю. На мой взгляд модель выглядит следующим образом:Элементы управления Radiobutton не отправляются в viewmodel

public class PreconditionsViewModel 
{ 
    public List<KeyValuePair<int, string>> Provinces { get; set; } 

    [DataType(DataType.Date)] 
    [DisplayFormat(DataFormatString = "{0:dd/mm/yy}", ApplyFormatInEditMode = true)] 
    public DateTime SeedingDate { get; set; } 

    [DataType(DataType.Date)] 
    [DisplayFormat(DataFormatString = "{0:dd/mm/yy}", ApplyFormatInEditMode = true)] 
    public DateTime HarvestDate { get; set; } 

    public int DryMatterPercentage { get; set; } 

    public int PostalCode { get; set; } 

} 

Метод Действие: (для простоты я оставил метод возвращает только индекс Но я должен быть в состоянии видеть то, что держит модель.)

[HttpPost] 
    public ActionResult Save(PreconditionsViewModel model) 
    {    
     return View("Index"); 
    } 

The View:

@using (Html.BeginForm("Save", "Precondition", FormMethod.Post, new { @class="userPreconditionForm" })) 
{ 
    foreach (var province in Model.Provinces) 
    { 
     @Html.Label(province.Value, new { @class = "provinces" }) 
     @Html.RadioButtonFor(m => province.Key, province.Value)  
    } 

    <br/><br /> 

    @Html.LabelFor(m => m.PostalCode, Resource.PostalCode) 
    @Html.TextBoxFor(m => m.PostalCode) 
    <br/><br /> 

    @Html.Label(Resource.DesiredSeedingDate) 
    @Html.TextBoxFor(m => m.SeedingDate, new { @class="dateField", @readonly="true" }) 
    <br/><br /> 

    @Html.Label(Resource.LatestHarvestDate) 
    @Html.TextBoxFor(m => m.HarvestDate, new { @class = "dateField", @readonly = "true" }) 
    <br/><br /> 

    @Html.Label(Resource.DesiredDryMatterPercentage) 
    @Html.TextBoxFor(m => m.DryMatterPercentage) 

    <br/><br/> 

    <input type="submit" value="@Resource.Continue" /> 
} 

<br/> 

Как вы, вероятно, можете увидеть мои erros в коде:

foreach (var province in Model.Provinces) 
{ 
    @Html.Label(province.Value, new { @class = "provinces" }) 
    @Html.RadioButtonFor(m => province.Key, province.Value)  
} 

Что я пытаюсь сделать здесь, это создать ярлык и радиобудильник для каждого KeyValuePair в моей модели ViewModel. Но я делаю это неправильно, так как они не получены в контроллере. Что я делаю не так?

(Я новичок с ASP.NET MVC, поэтому критики и улучшения приветствуются)


Добавлен отредактирован код после @ LeftyX автора Ответить

foreach (var province in Model.Provinces) 
{ 
    @Html.Label("Provinces_" + province.Key, province.Value, new { @class = "provinces" }) 
    @Html.RadioButton("Province", province.Key, new { id = "Provinces_" + province.Key })  
} 
+0

Итак, любая обратная связь? – LeftyX

ответ

0

Try, чтобы добавить свойство Province к вашему ViewModel PreconditionsViewModel:

public int Province { get; set; } 

и в вашем VI РЭБ изменить код для создания кнопок радио:

foreach (var province in Model.Provinces) 
{ 
    @Html.Label("Provinces_" + province.Key, province.Value, new { @class = "provinces" }) 
    @Html.RadioButton("Province", province.Key, new { id="Provinces_" + province.Key}) 
} 

Каждый радиоуправление будет оказана следующим образом:

<input id="Provinces_1" name="Province" type="radio" value="1"> 
<input id="Provinces_2" name="Province" type="radio" value="2"> 

Как вы можете видеть каждый один из входов имеет различные id но тот же name ,

При отправке вашей формы добавленная собственность Province будет привязана к выбранному полю.

Вы можете попробовать решение проблемы с zip-файлом here.

+0

Где вы используете новое свойство, которое вы ввели в ViewModel? Спасибо – user3563643

+0

Я добавил свое редактирование в свой код выше. Я все еще получаю нулевые значения при представлении представления. Я что-то пропустил? Я также добавил собственность int Province – user3563643

+0

@ user3563643: новое свойство читает стоимость выбранной провинции. Я обновил свой ответ с помощью некоторого кода (проверьте почтовый индекс в ссылке). – LeftyX