关于c#:MVC Razor单选按钮值到会话变量

MVC Razor Radio Button Value to Session Variable

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

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

谢谢


使用jquery和用httppost属性标记的controller方法可以很容易地做到这一点,您的controller方法将如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[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方法来从上面的控制器方法中获取值,而不刷新页面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<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功能更新单选按钮:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    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;
                }
            );
        }

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