この件に関する投稿がすでにいくつかあることは知っていますが、特定の問題に対する答えが見つからないようです。コントローラーに変数を渡すことができないのに、ハードコードされた値を渡すことができる理由について混乱しています...
これは機能します...
<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 は機能しないのはなぜですか?