我试图创建控制器动作,根据参数返回JSON或部分html。异步将结果返回到MVC页面的最佳方法是什么?
当前回答
在action方法中,返回Json(object)将Json返回到页面。
public ActionResult SomeActionMethod() {
return Json(new {foo="bar", baz="Blech"});
}
然后使用Ajax调用action方法。您可以使用ViewPage中的一个辅助方法,例如
<%= Ajax.ActionLink("SomeActionMethod", new AjaxOptions {OnSuccess="somemethod"}) %>
SomeMethod将是一个javascript方法,然后计算返回的Json对象。
如果你想返回一个普通的字符串,你可以使用ContentResult:
public ActionResult SomeActionMethod() {
return Content("hello world!");
}
ContentResult默认返回一个文本/纯文本作为它的contentType。 这是可重载的,所以你还可以做:
return Content("<xml>This is poorly formatted xml.</xml>", "text/xml");
其他回答
我发现用JQuery实现MVC ajax GET调用的几个问题,这让我头疼,所以在这里分享解决方案。
Make sure to include the data type "json" in the ajax call. This will automatically parse the returned JSON object for you (given the server returns valid json). Include the JsonRequestBehavior.AllowGet; without this MVC was returning a HTTP 500 error (with dataType: json specified on the client). Add cache: false to the $.ajax call, otherwise you will ultimately get HTTP 304 responses (instead of HTTP 200 responses) and the server will not process your request. Finally, the json is case sensitive, so the casing of the elements needs to match on the server side and client side.
JQuery示例:
$.ajax({
type: 'get',
dataType: 'json',
cache: false,
url: '/MyController/MyMethod',
data: { keyid: 1, newval: 10 },
success: function (response, textStatus, jqXHR) {
alert(parseInt(response.oldval) + ' changed to ' + newval);
},
error: function(jqXHR, textStatus, errorThrown) {
alert('Error - ' + errorThrown);
}
});
示例MVC代码:
[HttpGet]
public ActionResult MyMethod(int keyid, int newval)
{
var oldval = 0;
using (var db = new MyContext())
{
var dbRecord = db.MyTable.Where(t => t.keyid == keyid).FirstOrDefault();
if (dbRecord != null)
{
oldval = dbRecord.TheValue;
dbRecord.TheValue = newval;
db.SaveChanges();
}
}
return Json(new { success = true, oldval = oldval},
JsonRequestBehavior.AllowGet);
}
public ActionResult GetExcelColumn()
{
List<string> lstAppendColumn = new List<string>();
lstAppendColumn.Add("First");
lstAppendColumn.Add("Second");
lstAppendColumn.Add("Third");
return Json(new { lstAppendColumn = lstAppendColumn, Status = "Success" }, JsonRequestBehavior.AllowGet);
}
}
与编码框架的替代解决方案
操作返回json
控制器
[HttpGet]
public ActionResult SomeActionMethod()
{
return IncJson(new SomeVm(){Id = 1,Name ="Inc"});
}
剃须刀页面
@using (var template = Html.Incoding().ScriptTemplate<SomeVm>("tmplId"))
{
using (var each = template.ForEach())
{
<span> Id: @each.For(r=>r.Id) Name: @each.For(r=>r.Name)</span>
}
}
@(Html.When(JqueryBind.InitIncoding)
.Do()
.AjaxGet(Url.Action("SomeActionMethod","SomeContoller"))
.OnSuccess(dsl => dsl.Self().Core()
.Insert
.WithTemplate(Selector.Jquery.Id("tmplId"))
.Html())
.AsHtmlAttributes()
.ToDiv())
操作返回html
控制器
[HttpGet]
public ActionResult SomeActionMethod()
{
return IncView();
}
剃须刀页面
@(Html.When(JqueryBind.InitIncoding)
.Do()
.AjaxGet(Url.Action("SomeActionMethod","SomeContoller"))
.OnSuccess(dsl => dsl.Self().Core().Insert.Html())
.AsHtmlAttributes()
.ToDiv())
在action方法中,返回Json(object)将Json返回到页面。
public ActionResult SomeActionMethod() {
return Json(new {foo="bar", baz="Blech"});
}
然后使用Ajax调用action方法。您可以使用ViewPage中的一个辅助方法,例如
<%= Ajax.ActionLink("SomeActionMethod", new AjaxOptions {OnSuccess="somemethod"}) %>
SomeMethod将是一个javascript方法,然后计算返回的Json对象。
如果你想返回一个普通的字符串,你可以使用ContentResult:
public ActionResult SomeActionMethod() {
return Content("hello world!");
}
ContentResult默认返回一个文本/纯文本作为它的contentType。 这是可重载的,所以你还可以做:
return Content("<xml>This is poorly formatted xml.</xml>", "text/xml");
另一种处理JSON数据的好方法是使用JQuery getJSON函数。你可以致电
public ActionResult SomeActionMethod(int id)
{
return Json(new {foo="bar", baz="Blech"});
}
方法从jquery getJSON方法简单…
$.getJSON("../SomeActionMethod", { id: someId },
function(data) {
alert(data.foo);
alert(data.baz);
}
);
推荐文章
- Java Server Faces 2.0的主要缺点是什么?
- asp.net mvc:为什么是Html。复选框生成额外的隐藏输入
- 如何在Mac上的命令行安装JQ ?
- 剃刀视图抛出“名称‘模型’在当前上下文中不存在”
- 我如何捕捉Ajax查询后错误?
- HTML按钮调用MVC控制器和动作方法
- 不带空格的Python - json
- ASP。NET MVC 3 Razor:在head标签中包含JavaScript文件
- 我如何从一个WCF服务返回干净的JSON ?
- mongodb中使用ISODate的日期查询似乎无法正常工作
- 将列表序列化为JSON
- 用c#反序列化JSON
- JSON可以以“[”开头吗?
- 将JSON转换为映射
- 如何检测URL是否在JavaScript哈希后发生了变化