2015-11-25 15 views
1

这是我的控制器声明变量返回JSON结果(ASP.NET MVC4)

[HttpPost] 
[AjaxAction] 
public ActionResult Registration(RegisterUserModel registerUser) 
{ 
    var data; 

    if (ModelState.IsValid) 
    { 
     if (!IsUserExist(registerUser.Email)) 
     {  

      var crypto = new SimpleCrypto.PBKDF2(); 

      var encrpPass = crypto.Compute(registerUser.Password); 

      var newUser = _db.Users.Create(); 

      newUser.Name = registerUser.Name; 
      newUser.Email = registerUser.Email; 
      newUser.Type = UserType.User.ToString(); 

      newUser.Password = encrpPass; 
      newUser.PasswordSalt = crypto.Salt; 

      _db.Users.Add(newUser); 
      _db.SaveChanges(); 

      data = new { status = "OK", message = "Success" }; 

     } 
     else 
     { 

      data = new { status = "ERROR", message = "User already exists" }; 
     } 
    } 
    else 
    { 

     data = new { status = "ERROR", message = "Data is incorrect" }; 
    } 
    return Json(data, JsonRequestBehavior.AllowGet); 
} 

行动,但我不知道如何以正确的方式初始化data变量,因为我需要设置不同值在不同情况下。什么是正确的方法来做到这一点?

回答

2

我通常使用多个return语句,以避免申报对象像

if(something){ 
return Json(new{status = "status 1", message = "message1"}) 
} 
else{ 
return Json(new{status = "status 2", message = "message2"}) 
} 
+0

好主意,我没有想过,谢谢! – Heidel

+0

只是一个供参考。 else语句不需要,如果可以写 if(true) { return'whatever' } return'whatever'; – Fran

+0

@非常值得注意,但实际上我不喜欢在我的行动中有多重回报,我更喜欢拥有一个回报。也许我不对。 – Heidel

1

你可以试试这个:

var data = new object(); 
+0

你怎么填充状态和消息属性与对象 –

+0

据,因为我知道,有可用'没有System.Object的公共属性' –

+0

而且,如果将数据初始化为对象,然后为其分配具有两个属性的匿名对象,代码将不会编译。 Dot Net为我编译的动态 –

1

可以使用dynamic关键字。

dynamic data; 
2

这里是其中的一个选项

[HttpPost] 
[AjaxAction] 
public ActionResult Registration(RegisterUserModel registerUser) 
{ 
    JsonResult data; 

    if (ModelState.IsValid) 
    { 
     if (!IsUserExist(registerUser.Email)) 
     {  

      var crypto = new SimpleCrypto.PBKDF2(); 

      var encrpPass = crypto.Compute(registerUser.Password); 

      var newUser = _db.Users.Create(); 

      newUser.Name = registerUser.Name; 
      newUser.Email = registerUser.Email; 
      newUser.Type = UserType.User.ToString(); 

      newUser.Password = encrpPass; 
      newUser.PasswordSalt = crypto.Salt; 

      _db.Users.Add(newUser); 
      _db.SaveChanges(); 

      data = Json(new { status = "OK", message = "Success" }, JsonRequestBehavior.AllowGet); 

     } 
     else 
     { 

      data = Json(new { status = "ERROR", message = "User already exists"}, JsonRequestBehavior.AllowGet); 
     } 
    } 
    else 
    { 

     data = Json(new { status = "ERROR", message = "Data is incorrect" }, JsonRequestBehavior.AllowGet); 
    } 
    return data; 
} 
+0

非常感谢,有趣的想法。 – Heidel