2013-05-27 40 views
2

我正在開發MVC應用程序,我使用的是剃刀語法。 我想從下拉列表中選擇項目並將其傳遞給控制器​​方法。如何將選定的下拉值傳遞給MVC中的URL?

但我得到錯誤。

The name 'd' does not exist in the current context 

更新的代碼是...

$("#btnForword").click(function(){ 
    d = $('#HODList').val() 
    alert(d); 

    var url2 = "@Html.Raw(Url.Action("SendPaymentAdviceForApproval", "PaymentAdvice", new { paymentAdviceId = "idValue" , nHOD = "@@[email protected]@" }))" 
    url2 = url2.replace("idValue",'@Model.Id'); 
    url2 = url2.replace("@@[email protected]@",d); 

    $.ajax({ 
     url: url2, type: "POST", success: function (data) { 
      $("#btnForword").css("display","none"); 

     } 
    }); 
    return false; 
}); 

問題解決問題是在 「d」 解決

的問題在變量 'd'。

我使用檢查谷歌瀏覽器的元素屬性,當我看到它在控制檯窗口.... 當我按一下按鈕選中,我可以看到形成如下方式

HT串... ../PaymentAdvice/SendPaymentAdviceForApproval?paymentAdviceId=304 & nHO8 = d

的jquery-1.7.1.min.js:4

看到在上面的鏈接的最後一個字符,它不應該被來作爲一個「 = D「不是嗎?

我用下面的代碼...它完美地工作。

$("#btnForword").click(function(){ 

      var url2 = "@Html.Raw(Url.Action("SendPaymentAdviceForApproval", "PaymentAdvice", new { paymentAdviceId = "idValue" , nHOD = "HODId" }))"; 
      url2 = url2.replace("idValue",'@Model.Id'); 
      url2 = url2.replace("HODId",$('#HODList').val()); 


      $.ajax({ 
       url: url2, type: "POST", success: function (data) { 
        $("#btnForword").css("display","none"); 

       } 
      }); 
      return false; 
     }); 

這是Jquery中的一個bug嗎?

+0

你不能用js變量在服務器端代碼...... –

+0

你只需要改變你的語法像d =的document.getElementById( 「HODList」)值。 ;到var d = document.getElementById(「HODList」).value;可能是這個幫助 – Rajpurohit

+0

問題解決了,請檢查更新的問題... – bnil

回答

0

試試這個

$(function(){ 

$("#btnForword").click(function(){ 
    var d = $('#HODList').val(); 

    var url2 = "@Html.Raw(Url.Action("SendPaymentAdviceForApproval", "PaymentAdvice", new { paymentAdviceId = "idValue" , nHOD = "@@[email protected]@" }))"; 
    url2 = url2.replace("idValue",'@Model.Id'); 
    url2 = url2.replace("@@[email protected]@",d); 

    $.ajax({ 
     url: url2, type: "POST", success: function (data) { 
      $("#btnForword").css("display","none"); 

     } 
    }); 
    return false; 
    }); 
}); 

不考慮更換「d」,因爲它會影響到URL的您的另一部分以及..儘量具體佔位符代替。 如果這不起作用...那麼你可以請你也顯示你的Action方法的Signature嗎?

你的控制器動作應該是這樣的

[HttpPost] 
public JsonResult SendPaymentAdviceForApproval(int paymentAdviceId, int nHOD) 
{ 
    // Your existing logic here... 
} 

乾杯

+0

我沒有!!!! 我正在使用佔位符,而不是服務器端代碼中的變量。請撤消你的投票 –

+0

'nHOD =「#D#」'這是什麼?這必須是選定的項目值是'D' –

+0

不是所有爵士:)它是一個佔位符,我用它來設置值替換函數... url2 = url2.replace(「#D#」,d) ; –

0

,您應該使用的$.ajaxdata屬性來傳遞參數到控制器動作。

$("#btnForword").click(function(){ 
    var d = document.getElementById("HODList").value; 

    // define url 
    var url2 = 'Url.Action("SendPaymentAdviceForApproval", "PaymentAdvice")'; 
    //url2 = url2.replace("idValue",'@Model.Id'); 
    //url2 = url2.replace("d",'@d'); 

    $.ajax({ 
     url: url2, 
     type: "POST", 
     // add parameters in here... 
     data: { paymentAdviceId : @Model.Id, nHOD : d } 
     success: function (data) { 
      $("#btnForword").css("display","none"); 
     } 
    }); 

    return false; 
}); 

而且你的控制器應長相:

public ActionResult SendPaymentAdviceForApproval(int paymentAdviceId, int nHOD){...} 
+0

d = $('#HODList')。val() var url2 =「@ Html.Raw(Url.Action(」SendPaymentAdviceForApproval「,what chnages I have to make this statement?''PaymentAdvice',new {paymentAdviceId =「idValue」,nHOD =「#D#」}))「; url2 = url2.replace(「idValue」,'@ Model.Id'); url2 = url2.replace(「#D#」,d);' – bnil

+0

您想將下拉值傳遞給Ur.Action,這是不可能的。你不能。 'd'是js變量,'Url.Action'是服務器端代碼。 –

+0

也沒有必要使用Html.Raw –

相關問題