0

我知道已经有一些关于这个主题的帖子,但我似乎无法找出我的具体问题的答案。我很困惑为什么我不能将变量传递给控制器​​,但我可以传递一个硬编码的值......

这有效...

<script type="text/javascript">
$().ready(function () {
$("#MessageTypes").change(function () {
        //I know this is a horrible way to do it but for some reason I couldnt pass the sMessageType directly in
        var sMessageType = $("#MessageTypes").val();
        if (sMessageType == "Professional Voicefile") {
            $.get('@Url.Action("GenerateMessageDesc", new { MessageType = "Professional Voicefile" } )', function (data) {
                $('#MessageDesc').replaceWith(data);
            });
        }
        else if (sMessageType == "Dynamic Field") {
            $.get('@Url.Action("GenerateMessageDesc", new { MessageType = "Dynamic Field" } )', function (data) {
                $('#MessageDesc').replaceWith(data);
            });
        }
        else {
            //default to prof
            $.get('@Url.Action("GenerateMessageDesc", new { MessageType = "Professional Voicefile" } )', function (data) {
                $('#MessageDesc').replaceWith(data);
            });
        }
    });
}); 

......但事实并非如此。为什么?

<script type="text/javascript">
$().ready(function () {
    $("#MessageTypes").change(function () {
        var sMessageType = $("#MessageTypes").val();
            $.get('@Url.Action("GenerateMessageDesc", new { MessageType = sMessageType } )', function (data) {
                $('#MessageDesc').replaceWith(data);
            });
        }
    });
}); 

它说“当前上下文中不存在名称'sMessageType'”。

我想也许我应该使用某种 ajax 调用来调用控制器并更新视图,而不是我的操作方式——但是,为什么场景 1 有效但场景 2 无效?

4

1 回答 1

1

它说“当前上下文中不存在名称'sMessageType'”。

sMessageType是一个 javascript 变量,它存在于您尝试在服务器端助手中使用的客户端上。这显然是不可能的,因为 javascript 在服务器上的客户端和服务器端脚本上运行。

这是实现这一目标的正确方法:

$.get('@Url.Action("GenerateMessageDesc")', { messageType: sMessageType }, function (data) {
    $('#MessageDesc').replaceWith(data);
});

这会将 MessageType 作为查询字符串参数传递,因此您的目标控制器操作可能如下所示:

public ActionResult GenerateMessageDesc(string messageType)
{
    ...
}
于 2012-08-23T17:51:09.930 回答