使用ajax调用控制器无法找到控制器

时间:2011-03-06 04:50:11

标签: asp.net-mvc-3

我试图通过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错误。我做错了什么?我已经在我的控制器上放置了一个断点但是它没有那么远

2 个答案:

答案 0 :(得分:5)

您的网址应为:

'/商业/ PreviewEmail'

而不是:

'/ BusinessController / PreviewEmail'

但是,构建网址的建议做法是使用您的路线:

Url.Action(“PreviewEmail”,“商家”)

顺便说一句,您的代码中还有另一个问题。通过将“application / json”设置为您的contentType,MVC将期望一个JSON字符串。但是,当您将JavaScript对象分配给$ .ajax()的data属性时,jQuery会将值序列化为:

电子邮件= 1223

因此,您需要通过执行以下操作将字符串分配给data属性:

var p ='{“email”:“1223”}';

答案 1 :(得分:0)

@Url.Action在JS文件中不起作用。如果我对Controller/Action的调用是在JS文件中怎么办?

现在我正在检索location.href,然后替换动作名称。 (这可能不是明智之举)