我试图通过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错误。我做错了什么?我已经在我的控制器上放置了一个断点但是它没有那么远
答案 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
,然后替换动作名称。
(这可能不是明智之举)