MVC Razor单选按钮值到会话变量

时间:2014-01-15 16:37:42

标签: c# asp.net-mvc asp.net-mvc-4 model radio-button

有没有人知道如何在MVC中将是/否单选按钮设置为会话变量,以便在稍后的过程中检查会话变量。我不希望在我的模型上存储单选按钮的值,因为用户必须编辑和保存,从而将此用户默认为此复选框值。

@Html.Label("New Report")
@Html.RadioButton("requestNewReport", "1")Yes
@Html.RadioButton("requestNewReport", "0", new { @checked = "checked" })No

由于

1 个答案:

答案 0 :(得分:0)

你可以使用Jquery和一个标有HttpPost属性的控制器方法很容易地做到这一点,你的控制器方法看起来像这样:

[HttpPost]
public ActionResult GetSessionVariable()
{
    const string sessionVariableName = "MySessionVariable";

    var sessionVariable = Session[sessionVariableName] as string;

    if (sessionVariable == null)
    {
        Session[sessionVariableName] = "No";
        sessionVariable = "No";
    }

    return Content(sessionVariable);
}

显然你的会话变量会在程序的其他地方发生变化,这就像现在一样,并且如果尚未分配则将其设置为默认值。

然后在你的视图中,你可以有一个这样的表单,包含你的单选按钮,以及一个输入按钮,点击它时运行一个Javascript方法从上面的控制器方法中获取值而不刷新页面:

<form id="MyForm">
<fieldset>
    <legend>My Form</legend>
    <p>
        <label>Radio buttons</label>

        <input type="radio" name="radioYesNo" id="radioNo" value="No" checked="checked" />
        <label for="radioNo">No</label>

        <input type="radio" name="radioYesNo" id="radioYes" value="Yes" />
        <label for="radioYes">Yes</label>

        <button type="submit" onclick="UpdateRadioBox();">Update Radio Button</button>
    </p>
</fieldset>
</form>

此更新的Javascript方法如下,它使用jquery提供的ajax功能来更新单选按钮:

<script>

    function UpdateRadioBox() {
        $("#MyForm").submit(
                function () {
                    var url = "Home/GetSessionVariable";

                    $.ajax
                    (
                        {
                            type: "POST",
                            url: url,
                            success: function (data) {
                                if (data == "Yes") {
                                    $("#radioYes").attr('checked', 'checked');
                                } else {
                                    $("#radioNo").attr('checked', 'checked');
                                }
                            }
                        }
                    );

                    return false;
                }
            );
        }

</script>

您不必在输入按钮下运行Javascript,您可以这样做(例如,每隔x秒在一个计时器上)。