在ASP.NET MVC 3中,哪个更正确使用:Json()或new JsonResult()?要么返回相同的结果.感谢您帮助解决办公室辩论.
我有以下控制器:
public class HelloController
{
public ActionResult Index()
{
return View()
}
public ActionResult Hello()
{
return Json(new{ greeting = "hello, world!" }, JsonRequestBehavior.AllowGet);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,里面Index.cshtml:
...html stuffs
<script type="text/javascript">
alert("@Html.Action("Hello")");
</script>
Run Code Online (Sandbox Code Playgroud)
我发现,当我在浏览器中访问此URL时,响应内容类型会application/json; charset=utf-8导致浏览器将html呈现为字符串而不是...网页.
什么是最好的解决方法?
具有string包含以下原料的JSON数据(简化为问题的缘故):
var MyString = "{ 'val': 'apple' }";
Run Code Online (Sandbox Code Playgroud)
如何创建表示JsonResult对象MyString?
我试图使用Json(对象)方法.但它将原始json数据作为字符串处理 - 逻辑:P-.所以返回的HTTP响应如下所示:
"{ 'val': 'apple' }"
Run Code Online (Sandbox Code Playgroud)
而不是给定的原始Json数据:
{ 'val': 'apple' }
Run Code Online (Sandbox Code Playgroud)
这就是我想要实现的目标:
我试图在测试ASP.NET MVC3应用程序中填充ComboBox(Telerik RAD COmboBox).
我在我的ASPX页面上定义了ComboBox,在控制器中我定义了返回JsonResult的动作调用.
我遇到的问题是我使用的Web服务已经将结果集作为JSON字符串返回.如何直接从Webservice传递响应.
以下是代码片段:ASPX页面:
<% Html.Telerik().ComboBox()
.Name("cbRefTables")
.DataBinding(b => b
.Ajax()
.Select("GetCALMdata","Common")
)
.Render();
%>
Run Code Online (Sandbox Code Playgroud)
控制器:称为CommomController
public JsonResult GetCALMdata()
{
CALMwsP.wsCALMSoapClient wsC = new CALMwsP.wsCALMSoapClient("wsCALMSoap");
string resultset = wsC.GetRefTables("P_1", "P_2", "P_3", "P_4");
return ??; -- I want to return resultset which is already formatted.
}
Run Code Online (Sandbox Code Playgroud) 在ASP.NET MVC5中,我有一个带JsonResult返回类型的控制器.
根据我想要返回404的参数,因为这描述了请求不存在的数据的用户.
我可以,throw new HttpException(404, "message")但鉴于return HttpNotFound()语法,这感觉很脏.当然,这HttpNotFoundResult不起作用,因为不继承JsonResult
我应该如何从JsonResult控制器方法中干净地返回404 ?
我有下面的代码,在开发机器上工作正常,但从远程浏览器调用时却没有...
$.ajax({
type: 'POST',
url: '@Url.Action("Action", "Controller")',
data: { id: id },
dataType: 'json',
async: true,
success: function (data) {
},
error: function (jqXHR, status, err) {
var result = jqXHR.responseJSON;
}
});
Run Code Online (Sandbox Code Playgroud)
jqXHR.responseJSON对象在从localhost调用时工作,但是当从远程计算机调用时没有,它返回为未定义...有人可以帮助我吗?提前致谢!
我有一个Action方法,我要么在一个条件下返回JSON,要么在另一个条件下重定向.我以为我可以从我的方法返回的ActionResult,但这样做会导致错误这样做"不是所有的代码路径返回一个值"
谁能告诉我我做错了什么?或者如何达到预期的效果?
这是下面的代码:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Login(User user)
{
var myErrors = new Dictionary<string, string>();
try
{
if (ModelState.IsValid)
{
if (userRepository.ValidUser(user))
{
RedirectToAction("Index", "Group");
//return Json("Valid");
}
else
{
return Json("Invalid");
}
}
else
{
foreach (KeyValuePair<string, ModelState> keyValuePair in ViewData.ModelState)
{
if (keyValuePair.Value.Errors.Count > 0)
{
List<string> errors = new List<string>();
myErrors.Add(keyValuePair.Key, keyValuePair.Value.Errors[0].ErrorMessage);
}
}
return Json(myErrors);
}
}
catch (Exception)
{
return Json("Invalid");
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:澄清一下,我已经return RedirectToAction("Index", "Group");按照答案中的建议尝试了,但它没有做任何事情.我正在重定向到的动作中的断点不会被击中.
上下文
语言:C#
平台版本:Microsoft .Net Framework 4.0
操作系统:Windows 7 Professional(64位)
约束:Microsoft MVC.Net 3.0
问题
我发现自己现在在浏览器中大量查看JSON,将浏览器指向一个Controller Action或我本地开发服务器上的另一个,并在视觉上解析JSON以确保所有内容都按照我们想要的方式进行格式化.MVC 3序列化程序(或JSON.Net序列化程序)返回的JSON总是返回一个缩小的字符串,所以我结束了这样的事情:
{"Bars":[{"Name":"Ghost Bar","Address":"2440 Victory Park Lane, 33rd Floor, Dallas, TX 75219","OpenDate":"\/Date(1208062800000)\/","Status":"Open"},{"Name":"M-Street Bar","Address":"5628 Sears Street, Dallas, TX 75206","OpenDate":"\/Date(1064811600000)\/","Status":"Closed"},{"Name":"Zephyr\u0027s Lounge","Address":"3520 Greenville Avenue, Dallas, TX 75206","OpenDate":"\/Date(981007200000)\/","Status":"Open"}]}
Run Code Online (Sandbox Code Playgroud)
问题
我真的想找到一种方法,至少在调试期间,让JsonResult被"美化",使它看起来更像这样:
{
"Bars": [
{
"Name": "Ghost Bar",
"Address": "2440 Victory Park Lane, 33rd Floor, Dallas, TX 75219",
"OpenDate": "\/Date(1208062800000)\/",
"Status": "Open"
},
{
"Name": "M-Street Bar",
"Address": "5628 Sears Street, Dallas, TX 75206",
"OpenDate": "\/Date(1064811600000)\/",
"Status": "Closed"
},
{
"Name": …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
[HttpPost]
public JsonResult Index2(FormCollection fc)
{
var goalcardWithPlannedDate = repository.GetUserGoalCardWithPlannedDate();
return Json(goalcardWithPlannedDate.Select(x => new GoalCardViewModel(x)));
}
Run Code Online (Sandbox Code Playgroud)
但我想在部分视图中使用它,我该怎么做?
我在控制器上设置了这个测试方法,以消除它的任何复杂性.基于我从搜索中找到的所有结果,这应该工作.我不确定我在这里缺少什么.
public JsonResult test()
{
return Json(new { id = 1 });
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误.
无法将类型'System.Web.Http.Results.JsonResult'隐式转换为'System.Web.Mvc.JsonResult'
jsonresult ×10
asp.net-mvc ×7
c# ×5
json ×5
asp.net ×2
ajax ×1
content-type ×1
jquery ×1
telerik-mvc ×1