【问题标题】:JsonResult returning "undefined"JsonResult 返回“未定义”
【发布时间】:2017-08-14 09:31:39
【问题描述】:

您好,在 MVC 应用程序中,我在 AccountController.cs 中有以下函数:

public JsonResult IsAvailableUN(string Username)
{
    return Json(!Conn.Accounts.Any(Accounts => Accounts.Username == Username), JsonRequestBehavior.AllowGet);
}

Conn 是我的连接,Accounts 是表和模型的名称,Username 是文本框中的字符串和表的列名。

Accounts 模型中,我在公共字符串Username 上方有以下配置:

[Remote("IsAvailableUN", "Account", ErrorMessage = "This username is already taken!")]

在我看来,我已经包含了所需的 jquery.validate.min.jsjquery.validate.unobtrusive.min.js

这应该会触发我的Username 文本框,通过输入现有用户名并点击tab 后缀来给出错误,但是,浏览器的控制台会返回:

Uncaught SyntaxError: Unexpected token u in JSON at position 0
at Function.parse [as parseJSON] (<anonymous>)
at HTMLFormElement.l (jquery.validate.unobtrusive.min.js:5)
at Object.e [as errorPlacement] (jquery-3.1.1.min.js:2)
at c.validator.showLabel (jquery.validate.min.js:36)
at c.validator.defaultShowErrors (jquery.validate.min.js:34)
at c.validator.showErrors (jquery.validate.min.js:28)
at Object.success (jquery.validate.min.js:46)
at i (jquery-3.1.1.min.js:2)
at Object.fireWith [as resolveWith] (jquery-3.1.1.min.js:2)
at A (jquery-3.1.1.min.js:4)

我返回的 json 只包含 1 个单词:undefined

我错过了什么吗?

【问题讨论】:

  • 你能发布你收到的json吗?因为如果浏览器没有撒谎,你没有收到 json 回复,浏览器几乎不会撒谎
  • 我收到的只是undefined这个词
  • 你可以试试public JsonResult IsAvailableUN(string Username){return new JsonResult { Data = !Conn.Accounts.Any(Accounts =&gt; Accounts.Username == Username), JsonRequestBehavior = JsonRequestBehavior.AllowGet};}

标签: jquery asp.net-mvc validation jsonresult


【解决方案1】:

您的方法应该具有与具有远程验证的属性相同的参数。

检查您的属性名称。它应该是

[Remote("IsAvailableUN", "Account", ErrorMessage = "This username is already taken!")]
public string Username{get;set;} //Same as function parameter

并且返回应该是匿名类型。不是纯真/假

var anonymous =new {
  result=true;
};

return Json(anonymous , JsonRequestBehavior.AllowGet);

【讨论】:

  • 您好,感谢您的回复。我的方法与验证的名称完全相同。
【解决方案2】:

!Conn.Accounts.Any(Accounts => Accounts.Username == Username) 将返回布尔值(不是对象)。

它应该是 json object { "propertyName" : "value" }。你的情况应该是

 { "propertyName" : true } 

{ "propertyName" : false}

你可以使用

 var isValid = !Conn.Accounts.Any(Accounts => Accounts.Username == Username);
 return Json(new { Valid = isValid }, JsonRequestBehavior.AllowGet);

【讨论】:

  • 您好,感谢您对我的帖子的回复。不幸的是,这个解决方案也不起作用(结果相同)
【解决方案3】:
public JsonResult IsAvailableUN(string Username)
{
 var isExistUser = !Conn.Accounts.Any(Accounts => Accounts.Username == Username);
 return Json(new { Result =isExistUser},JsonRequestBehavior.AllowGet);
}

尝试这样。它应该可以工作。你应该将数据作为 JSON 对象而不是布尔变量返回

【讨论】:

    猜你喜欢
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多