Asp.net mvc 4 如何在MVC razor视图中设置编辑模式下选中的单选按钮

Asp.net mvc 4 如何在MVC razor视图中设置编辑模式下选中的单选按钮,asp.net-mvc-4,razor,Asp.net Mvc 4,Razor,我是MVC razor的新手。我正在尝试编辑网页。其中我有两个单选按钮。我成功保存单选按钮值的数据。但当我试图编辑该值时,我无法选择保存数据的单选按钮。 我有性别的枚举 public enum Gender { Male, Female } 我的创建代码是:- <div class="editor-label"> @Html.LabelFor(model => model.gender) </div> <div class="edito

我是MVC razor的新手。我正在尝试编辑网页。其中我有两个单选按钮。我成功保存单选按钮值的数据。但当我试图编辑该值时,我无法选择保存数据的单选按钮。 我有性别的枚举

public enum Gender
{
    Male,
    Female
}
我的创建代码是:-

<div class="editor-label">
   @Html.LabelFor(model => model.gender)
</div>
<div class="editor-field">
   @Html.RadioButtonFor(x => x.gender, (int)Gender.Male) Male
   @Html.RadioButtonFor(x => x.gender, (int)Gender.Female) Female
</div>

@LabelFor(model=>model.gender)
@RadioButton(x=>x.gender,(int)gender.Male)Male
@RadioButton(x=>x.gender,(int)gender.Female)女性
编辑代码就像

<div class="editor-label">
   @Html.LabelFor(model => model.gender)
</div>
<div>
   @if (Model.gender == (int)Gender.Male)
   {
   @Html.RadioButtonFor(model => model.gender, "Male", new { @checked = true })
   @Html.Label("Male")
   @Html.RadioButtonFor(model => model.gender, "Female")
   @Html.Label("Female")
   }
   else
   {
   @Html.RadioButtonFor(model => model.gender, "Male")
   @Html.Label("Male")
   @Html.RadioButtonFor(model => model.gender, "Female", new { @checked = true })
   @Html.Label("Female")
   }
</div>

@LabelFor(model=>model.gender)
@if(Model.gender==(int)gender.Male)
{
@RadioButton(model=>model.gender,“男性”,新的{@checked=true})
@Html.Label(“男性”)
@Html.radioButton(model=>model.gender,“女性”)
@Html.Label(“女性”)
}
其他的
{
@Html.radioButton(model=>model.gender,“男性”)
@Html.Label(“男性”)
@RadioButton(model=>model.gender,“女性”,新的{@checked=true})
@Html.Label(“女性”)
}
你写得像

@Html.RadioButtonFor(model => model.gender, "Male", new { @checked = true }) and
@Html.RadioButtonFor(model => model.gender, "Female", new { @checked = true })

这里您将性别作为
Enum
类型,并将单选按钮的值作为
string
类型写入-将“男性”更改为0,“女性”更改为1。

不要在视图级别执行此操作。只需将默认值设置为视图模型构造函数中的属性。干净简单。在回发中,所选值将自动填充正确的选择

比如说

public class MyViewModel
{
        public MyViewModel()
        {
            Gender = "Male";
        }
}

@RadioButton(i=>i.性别,“男性”)男性
@RadioButton(i=>i.性别,“女性”)女性

以下是我的操作方法,可用于创建和编辑:

//How to do it with enums
<div class="editor-field">
   @Html.RadioButtonFor(x => x.gender, (int)Gender.Male) Male
   @Html.RadioButtonFor(x => x.gender, (int)Gender.Female) Female
</div>

//And with Booleans
<div class="editor-field">
   @Html.RadioButtonFor(x => x.IsMale, true) Male
   @Html.RadioButtonFor(x => x.IsMale, false) Female
</div>
//如何使用枚举
@RadioButton(x=>x.gender,(int)gender.Male)Male
@RadioButton(x=>x.gender,(int)gender.Female)女性
//还有布尔人
@RadioButton(x=>x.IsMale,true)男性
@(x=>x.IsMale,false)女性
提供的值(true和false)是引擎将呈现为html元素值的值,即:

<input id="IsMale" type="radio" name="IsMale" value="True">
<input id="IsMale" type="radio" name="IsMale" value="False">

检查的属性取决于Model.IsMale值

Razor引擎似乎在内部将set单选按钮值与模型值相匹配,前提是存在正确的from和to字符串转换。
因此,无需将其作为html属性添加到helper方法中。

将选中的添加到两个单选按钮中。然后在document ready上显示/隐藏所需的文件


全版
选择模块

以下是根据编辑表单中的值获取选中单选按钮的值和设置选中单选按钮的代码:

控制器:

[HttpPost]
public ActionResult Create(FormCollection collection)
{
    try
    {
        CommonServiceReference.tbl_user user = new CommonServiceReference.tbl_user();
        user.user_gender = collection["rdbtnGender"];
        return RedirectToAction("Index");
    }
    catch(Exception e)
    {
        throw e;
    }
}

public ActionResult Edit(int id)
{
    CommonServiceReference.ViewUserGroup user = clientObj.getUserById(id);
    ViewBag.UserObj = user;
    return View();
}
查看:

[HttpPost]
public ActionResult Create(FormCollection collection)
{
    try
    {
        CommonServiceReference.tbl_user user = new CommonServiceReference.tbl_user();
        user.user_gender = collection["rdbtnGender"];
        return RedirectToAction("Index");
    }
    catch(Exception e)
    {
        throw e;
    }
}

public ActionResult Edit(int id)
{
    CommonServiceReference.ViewUserGroup user = clientObj.getUserById(id);
    ViewBag.UserObj = user;
    return View();
}
创建:

<input type="radio" id="rdbtnGender1" name="rdbtnGender" value="Male" required>
<label for="rdbtnGender1">MALE</label>
<input type="radio" id="rdbtnGender2" name="rdbtnGender" value="Female" required>
<label  for="rdbtnGender2">FEMALE</label>

男性
女性
编辑:


男性
女性

要在MVC razor视图的编辑模式下设置选中的单选按钮,请尝试以下操作:

<div class="col-lg-11 col-md-11">
     @Html.RadioButtonFor(m => m.Role, "1", Model.Role == 1 ? "checked" : string.Empty) 
     <span>Admin</span>
     @Html.RadioButtonFor(m => m.Role, "0", Model.Role == 0 ? "checked" : string.Empty)
     <span>User</span>
     @Html.HiddenFor(m => m.Role)
</div>

@(m=>m.Role,“1”,Model.Role==1?“选中”:string.Empty)
管理
@Html.RadioButton(m=>m.Role,“0”,Model.Role==0?“选中”:string.Empty)
使用者
@HiddenFor(m=>m.Role)

希望能有帮助

我很高兴你为什么要把代码复杂化。我不喜欢enum在第一次寻找性别时的想法。我建议您研究一下模型绑定方法,例如:
@Html.radiobutton(model=>model.gender)
。此模型绑定为您提供双向保存n编辑两个单选按钮都将选中
checked=“true”
他不是建议使用该代码,而是强调了OP编写的内容。建议应应用于原始代码,但未反映在UI中。您使用的是哪个版本?我想我一定是用MVC3运行了这个。当我测试它时,它肯定能工作。另外,我的结束语标签上有一个拼写错误。我刚刚修复了它,所以如果你复制粘贴了我的答案,请再试一次。想知道这是如何在“编辑”模式下工作的吗?您正在对值进行硬编码,但使用相同的“isMale”布尔值对其进行操纵…@RobWashington,提供的值(true和false)是引擎将作为html元素的值呈现的值,即:。并且选中的属性依赖于Model.isMale值。@Nikolay…感谢您的澄清。我理解那部分。我想我是提前考虑了一下,发现这个解决方案只有在你有两个正确或错误的无线电选项时才会起作用。但是当你有多个无线电选项时(这不是OP所需要的),这就不好了。但是我现在知道你的解决方案了。@RobWashington,创建一个包含两个以上值的枚举绝对没有问题。如上图所示,将其正确映射到相应数量的单选按钮也同样有效。布尔示例是为了使映射更加清晰,干杯。:)