2011-03-06 213 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名称。 (这可能不是明智的做法)