使用knockout在asp.net mvc中渲染单选按钮

时间:2013-12-30 19:59:34

标签: asp.net asp.net-mvc knockout.js

我的模特 -

public class Model
        {
            public String SelectedValue;
        }

行动方法 -

public ActionResult Index()
        {
            Model model = new Model();
            model.SelectedValue = "a";
            return View("Index1", model);
        }

查看 -

<input type="radio" name="Group1" value="a" data-bind="attr: { checked: SelectedValue }" />
        <input type="radio" name="Group1" value="b" data-bind="attr: { checked: SelectedValue }" />
        <input type="radio" name="Group1" value="c" data-bind="attr: { checked: SelectedValue }" />

<script type="text/javascript">
        var data = @Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model));
        BindData();
</script>

我的javascript -

function BindData() {
    viewModelData = ko.mapping.fromJS(data);
    ko.applyBindings(viewModelData);
}

当渲染我的视图时,它会渲染所有三个单选按钮,并选择值为“c”的按钮。但是从动作方法我选择值为“a”的单选按钮。为什么会这样?

任何人都可以帮助我了解我的代码是否有任何问题,或者敲除如何在内部处理单选按钮选择。谢谢!

1 个答案:

答案 0 :(得分:2)

使用checked binding代替直接为此方案创建的attr绑定:

  

选中的绑定会将可检查的表单控件(即复选框(<input type='checkbox'>)或单选按钮(<input type='radio'>)与视图模型上的属性相关联。

所以在你的情况下你需要写:

<input type="radio" name="Group1" value="a" data-bind="checked: SelectedValue" />
<input type="radio" name="Group1" value="b" data-bind="checked: SelectedValue" />
<input type="radio" name="Group1" value="c" data-bind="checked: SelectedValue" />

演示JSFiddle