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)
{
...
}
工作得很有魅力。你能解释一下区别吗?