我已经关注this post,但我的解决方案唯一有用的是错误消息提醒。 :d
我的js-ajax代码:
$(document).ready(function () {
$('a').click(function (e) {
var data = { 'id': $(this).attr("id") };
var dataVal = JSON.stringify(data);
$.ajax({
type: "POST",
url: "@Url.Action("ActionName", "ControllerName")",
contentType: "application/json; charset=utf-8",
data: dataVal,
dataType: "json",
success: function (id) {
alert(data.d);
alert("yay! it works!");
},
error: function(id){
alert("haha, it doesn't work! Noob!");
}
});
return false;
});
});
它位于正文的末尾,因此在呈现所有其他html内容后加载。
这是我在控制器中的回调函数:
[HttpPost]
public ActionResult Hello(string id)
{
return RedirectToAction(id);
}
和HTML锚标记:
<a href="#" style="float:left; font-size:13px;" id="pageName">Read more</a>
所以,我想要的是,在点击一个锚标记链接时,这个JS被触发并从服务器端调用该函数,并向其传递 id 参数的值,回调函数将完成其工作(根据给定的id调用一些View)。
Buuuuut,我只得到“哈哈,它不起作用!Noob!”警报信息。 :D有什么建议吗?
使用某些代码进行更新
RedirectToAction
是框架中的一种方法,可以重定向到另一个操作。在这种情况下,我重定向到一个动作,它将调用我某个视图,例如这个:
public ActionResult Media()
{
//do some stuff here
return View();
}
答案 0 :(得分:1)
您必须修改方法
public ActionResult Media()
{
//do some stuff here
return View();
}
类似
public JsonResult Media()
{
//do some stuff here
return Json(new
{
myData = RenderPartialViewToString("ViewName", optionalModel),
errorMessage = error
});
}
参考ASP.NET MVC Razor: How to render a Razor Partial View's HTML inside the controller action
添加以下方法protected string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (StringWriter sw = new StringWriter()) {
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}