2015-11-25 45 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