2011-03-06 215 views
1

我想通過ajax調用控制器,但沒有多少運氣。 我在視圖中創建這個使用ajax呼叫控制器無法找到控制器

<input type="submit" id="preview-email" value="Preview Email" /> 

    <script type="text/javascript"> 
    $("#preview-email").click(function() { 
     var p = { "email": "1223" }; 
     $.ajax({ 
      url: '/BusinessController/PreviewEmail', 
      type: "POST", 
      data: p, 
      dataType: "json", 
      contentType: "application/json; charset=utf-8", 
      success: function (data) { 
       alert(data); 
      }, 
      error: function() { 
       alert("error"); 
      } 
     }); 
    }); 


</script> 

我控制器

[HttpPost] 
    public ActionResult PreviewEmail(string email) 
    { 
     // string d = ViewData["editor"].ToString(); 
     string e = System.Web.HttpUtility.HtmlDecode(email); 
     EmailModel model = new EmailModel() { EmailBody = e }; 
     return PartialView("_PreviewEmail", model); 
    } 

打開提琴手告訴我,它是一個500錯誤。我做錯了什麼?我已經把我的控制器上的斷點但它不走到這一步

回答

5

你的URL應該是:

'/商務/ PreviewEmail',而不是

「/ BusinessController/PreviewEmail 「

不過,爲了構建網址推薦的做法是使用你的路線:

Url.Action( 」PreviewEmail「 「商業」)

順便說一句,你有你的代碼中的另一個問題。通過設置「application/json」作爲你的contentType,MVC將期待一個JSON字符串。但是,當你將一個JavaScript對象的$阿賈克斯()的數據屬性,jQuery將序列化值這樣的:

電子郵件= 1223

所以你要爲字符串分配給數據財產,而不是這樣做:

var p ='{「email」:「1223」}';

+0

感謝Jonny的幫助 – 2011-03-06 05:24:18

0

@Url.Action在JS文件中不起作用。如果我的電話Controller/Action在JS文件裏面怎麼辦?

現在我正在檢索location.href,然後替換Action名稱。 (這可能不是明智的做法)