TextboxFor передает текст, а RadioButtonFor нет

Я пытаюсь передать RadioButtonFor модели.

контроллер

[HttpPost]
    public ActionResult Contact(ApplicationCommentType model)
    {
        //send email here

        //reload form
        ApplicationCommentType appdata = new ApplicationCommentType();
        appdata.CommentTypeData = db.CommentTypes.ToList();
        return View(appdata);
    }  

ApplicationCommentType

public class ApplicationCommentType
{
    public IEnumerable<CommentType> CommentTypeData { get; set; }
    public String CommentTypeDataSelection { get; set; }
    public String Name { get; set; }
    public String Email { get; set; }
    public String Comment { get; set; }
}

комментарийВведите

public partial class CommentType
{
    public int CommentTypeID { get; set; }
    public string CommentTypeDesc { get; set; }
}

Посмотреть

@using(@Html.BeginForm("Contact", "Home", FormMethod.Post, new{ @class ="form-horizontal"})){
            <fieldset>
                <legend>Contact Us</legend>
                <div class="form-group">
                    @Html.LabelFor(x => x.Email, new {@class="col-lg-2 control-label"})
                    <div class="col-lg-10">
                        @Html.TextBoxFor(x => x.Email, new { @class = "form-control" })                            
                    </div>
                </div>
                <div class="form-group">
                    @Html.LabelFor(x => x.Name, new { @class = "col-lg-2 control-label" })
                    <div class="col-lg-10">
                        @Html.TextBoxFor(x => x.Name, new { @class = "form-control" }) 
                    </div>
                </div>
                <div class="form-group">
                    <label for="textArea" class="col-lg-2 control-label">Questions, Comments, or Concerns</label>
                    <div class="col-lg-10">
                        @Html.TextAreaFor(x => x.Comment, new { @class = "form-control" }) 
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-lg-2 control-label">Comment Type</label>
                    <div class="col-lg-10">               
                        @foreach (var item in Model.CommentTypeData)
                        {
                            <div class="radio">
                                <label>
                                    @Html.RadioButtonFor(x => x.CommentTypeData, item.CommentTypeDesc)
                                    @Html.LabelFor(m => m.CommentTypeData, item.CommentTypeDesc, item.CommentTypeID)                                        
                                </label>
                            </div>
                        }      
                        @Html.HiddenFor(x => x.CommentTypeDataSelection)         
                    </div>
                </div>
           </fieldset>
}

Теперь этот вид работает, все элементы текстового поля работают. Размещение точки останова на [HttpPost] return возвращает следующие значения.

    Comment: "awesome"
    CommentTypeData: Count = 0
    CommentTypeDataSelection: null
    Email: "example@example.com"
    Name: "John Smith"

Разве CommentTypeData не должен иметь счет? Если я проверяю запрос, там выбрано значение.

Request.Params["CommentTypeData"]: "General Improvement Suggestion"

Так почему же модель не обновляется? Требуется ли вручную обновлять модель из объекта запроса?

1 ответ

Вы можете использовать @Html.RadioButtonFor, но вы должны убедиться, что item.CommentTypeDesc совместим с типом Radio.

Обратитесь к MVC4: две радиокнопки для одного логического свойства модели

Надеюсь, поможет.

Другие вопросы по тегам