C# 使用jquery向控制器发送一个下拉框值,并用结果填充另一个下拉框

C# 使用jquery向控制器发送一个下拉框值,并用结果填充另一个下拉框,c#,jquery,asp.net-mvc,C#,Jquery,Asp.net Mvc,我知道已经有一些关于这个主题的帖子,但我似乎无法找到我的具体问题的答案。我不明白为什么我不能将变量传递到控制器,但我可以传递硬编码的值 这很有效 <script type="text/javascript"> $().ready(function () { $("#MessageTypes").change(function () { //I know this is a horrible way to do it but for some reason I coul

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

这很有效

<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);
            });
        }
    });
}); 

$().ready(函数(){
$(“#消息类型”).change(函数(){
//我知道这是一种可怕的方法,但由于某些原因,我无法直接将sMessageType传递给您
var sMessageType=$(“#消息类型”).val();
如果(sMessageType==“专业语音文件”){
$.get('@Url.Action(“GenerateMessageDesc”,new{MessageType=“Professional Voicefile”}),函数(数据){
$('#MessageDesc')。替换为(数据);
});
}
else if(sMessageType==“动态字段”){
$.get('@Url.Action(“GenerateMessageDesc”,new{MessageType=“Dynamic Field”}),函数(数据){
$('#MessageDesc')。替换为(数据);
});
}
否则{
//默认为教授
$.get('@Url.Action(“GenerateMessageDesc”,new{MessageType=“Professional Voicefile”}),函数(数据){
$('#MessageDesc')。替换为(数据);
});
}
});
}); 

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

<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);
            });
        }
    });
}); 

$().ready(函数(){
$(“#消息类型”).change(函数(){
var sMessageType=$(“#消息类型”).val();
$.get('@Url.Action(“GenerateMessageDesc”,new{MessageType=sMessageType}'),函数(数据){
$('#MessageDesc')。替换为(数据);
});
}
});
}); 

它表示“当前上下文中不存在名称'sMessageType'

我想也许我应该使用某种ajax调用来调用控制器并更新视图,而不是我是如何做的——然而,为什么场景1可以工作而场景2不能

它表示“当前上下文中不存在名称'sMessageType'

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

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

$.get('@Url.Action("GenerateMessageDesc")', { messageType: sMessageType }, function (data) {
    $('#MessageDesc').replaceWith(data);
});
这将MessageType作为查询字符串参数传递,因此目标控制器操作可能如下所示:

public ActionResult GenerateMessageDesc(string messageType)
{
    ...
}

工作得很有魅力。你能解释一下区别吗?