mvc html单选,asp.net mvc - @html razor radio buttons mvc5 - Stack Overflow

here's my viewmodel

public class UserResponseModel

{

public string QuestionId { get; set;}

public string QuestionText { get; set; }

public bool IsChecked { get; set; }

}

so, for checkboxes this works beautifully

for (var i = 0; i < Model.UserResponses.Count; i++)

{

@Html.HiddenFor(x => x.UserResponses[i].QuestionId)

@Html.CheckBoxFor(x => x.UserResponses[i].IsChecked)

but for radio buttons this does not

for (var i = 0; i < Model.UserResponses.Count; i++)

{

@Html.HiddenFor(x => x.UserResponses[i].QuestionId)

@Html.RadioButtonFor(x => x.UserResponses[i].IsChecked, new { Name = "grp1" })

@Html.DisplayTextFor(x => x.UserResponses[i].QuestionText)

when i submit the form then IsChecked is always false - why - what am i missing - as I mentioned for checkboxes it works just fine. I did look at this question here but i'm not sure why radiobuttons require extra properties in the view model to hold the correct answer when checkboxes work transparently.

Edit: my question model is now as so

public class QuestionModel

{

public string WhichQuestion { get; set; }

public int PointsObtained { get; set; }

public bool CorrectAnswer { get; set; }

private List _userResponse;

public List UserResponses

{

get { return _userResponse ?? (_userResponse = new List()); }

set { _userResponse = value; }

}

}

notice i have just added public bool CorrectAnswer { get; set; }

and in my view here's the code

for (var i = 0; i < Model.UserResponses.Count; i++)

{

@Html.HiddenFor(x => x.UserResponses[i].QuestionId)

@Html.HiddenFor(x => x.CorrectAnswer)

@Html.HiddenFor(x => x.UserResponses[i].IsChecked)

@Html.RadioButtonFor(x => x.UserResponses[i].IsChecked, Model.CorrectAnswer, new { Name = "grp1" })

EDIT 2:

@Html.HiddenFor(x => x.UserResponses[i].QuestionId)

@Html.HiddenFor(x => x.SelectedAnswerId)

@Html.HiddenFor(x => x.UserResponses[i].IsChecked)

@Html.RadioButtonFor(x => x.UserResponses[i].IsChecked, Model.SelectedAnswerId, new { Name = "grp1" })

EDIT3:

public class QuestionModel

{

public string WhichQuestion { get; set; }

public int PointsObtained { get; set; }

private List _userResponse;

public List UserResponses

{

get { return _userResponse ?? (_userResponse = new List()); }

set { _userResponse = value; }

}

}

public class UserResponseModel

{

public string QuestionId { get; set;}

public string QuestionText { get; set; }

public string SelectedQuestionId { get; set; }

}

finally, my view

for (var i = 0; i < Model.UserResponses.Count; i++)

{

@Html.HiddenFor(x => x.UserResponses[i].QuestionId)

@Html.RadioButtonFor(x => x.UserResponses[i].SelectedQuestionId, Model.UserResponses[i].QuestionId, new { Name = "grp1" })

@*@Html.CheckBoxFor(x => x.UserResponses[i].IsChecked)*@

@Html.DisplayTextFor(x => x.UserResponses[i].QuestionText)

EDIT4:so finally I'm getting some where

this works!!!

@Html.RadioButtonFor(x => x.UserResponses[i].SelectedQuestionId, Model.UserResponses[i].QuestionId)

I can now see the selectedquestionid populated in my httppost method but if I do this

@Html.RadioButtonFor(x => x.UserResponses[i].SelectedQuestionId, Model.UserResponses[i].QuestionId, new {Name="grp"})

then though i am able to select only one radiobutton the selectedquestionid is null on httppost - wierd

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值