2015-02-23 63 views
0

這是我查看相關代碼:顯示而不是返回查看標籤

 @Html.LabelFor(model => model.nickName) 
     @Html.TextBoxFor(model => model.nickName, new { @class = "RegisterControls" }) 
     <br /><br /> 

     @Html.LabelFor(model => model.email) 
     @Html.TextBoxFor(model => model.email, new { @class = "RegisterControls" }) 
     <br /><br />    

     @Html.LabelFor(model => model.password) 
     @Html.TextBoxFor(model => model.password, new { @class = "RegisterControls" }) 

和行動方法:

public ActionResult RegisterNewUser(string uName, string email, string password) 
    { 
     ViewBag.Message = "Register"; 

     if (!users.RegisterUser(uName, email, password)) 
     { 
      ViewBag.DeniedMsg = "A user with that email already exists"; 
      return; //This doesn't work, as I should return a View 
     }    
     return PartialView("_Register");    
    } 

如果在註冊中已經存在的電子郵件地址的用戶類型(並點擊「創建帳戶」鏈接時,我想添加一個標籤,說明電子郵件已存在,並且不返回整個視圖。請參閱我的操作方法以獲得(希望)清晰度。

創建帳戶的鏈接:

@Ajax.ActionLink("Create account", "CheckifUserEmailExists", "RegisteredUsers", new AjaxOptions { UpdateTargetId = "updaterDiv" }, new { @class = "actionButtons" }) 

其實,更普遍。如果某人在文本框中輸入某些內容,則會在適當的控制器中調用操作方法。但是這個Action方法總是返回一個視圖。但是,如果您只想向該用戶顯示一條消息(例如說「創建賬戶」)並保持相同的觀點,該怎麼辦?你如何處理這個問題?我不能這樣做,因爲我必須返回一個視圖,但我想保持相同的視圖,並在那裏顯示消息

+0

您將密碼發送到GET方法,以便任何人都可以通過查看瀏覽器歷史記錄來查看用戶密碼!遵循正常的模式並進行POST。您可以使用'[Remote]'屬性在客戶端處理電子郵件(請參閱[如何:在ASP.NET MVC中實現遠程驗證](https://msdn.microsoft.com/zh-cn/library/gg508808 %28VS.98%29.aspx)),但你首先需要學習一些基礎知識。在VS中創建新應用程序時,研究'AccountController'中的代碼。 – 2015-02-23 22:24:47

+0

只需將您的'RegisterNewUser'操作更改爲接受'httppost',以便您不需要具有參數,因爲發佈的對象將在Request中可用。然後再將該對象再次傳遞給你的局部視圖(你的局部視圖必須再次被強制輸入),你會看到前一個視圖。輸入的值將再次顯示:) – BabyDuck 2015-02-25 05:33:47

回答

1

創建一個更多操作來返回字符串。像:

public string UserExistsMsg(string msg) 
{ 
    return msg; 
} 

,改變你的RegisterNewUser操作是這樣的:

public ActionResult RegisterNewUser(string uName, string email, string password) 
    { 
     ViewBag.Message = "Register"; 

     if (!users.RegisterUser(uName, email, password)) 
     { 
      return RedirectToAction("UserExistsMsg", "A user with that email already exists"); 
     } 
     return PartialView("_Register");    
    } 
+0

感謝您的回覆。雖然我不清楚ViewBag消息的顯示位置。它說RedirectToction,但我怎麼能合併我的ViewBag消息?再次感謝 – user1960836 2015-02-23 13:19:52

+0

如果有人對此有所瞭解,請分享。我還沒有解決它。如果電子郵件已存在,我不希望重定向,而只是保持相同視圖,並顯示一個標籤(ViewBag),告訴用戶提供另一封電子郵件 – user1960836 2015-02-23 17:37:25

+0

@ user1960836,對不起,我沒有看到你的回覆。請看第二個答案,我希望它能爲你工作。 – BabyDuck 2015-02-24 04:25:03

1

更改RegisterNewUser操作是這樣的:

public ActionResult RegisterNewUser(string uName, string email, string password) 
    { 
     ViewBag.Message = "Register"; 
     String msg = ""; 
     if (!users.RegisterUser(uName, email, password)) 
     { 
      msg = "A user with that email already exists"; 
     } 
     ViewBag.DeniedMsg = msg; 
     return PartialView("_Register");    
    } 

而在局部視圖頂部打印ViewBag字符串消息。如:

@VeiwBag.DeniedMsg 

如果用戶不存在,則不會打印任何內容。

+0

謝謝。這很有幫助。我仍然有回發的問題,所以如果用戶存在,它會通過回發再次返回註冊頁面,所以他在表單中輸入的所有內容都將丟失。這就是爲什麼我試圖避免返回視圖。有沒有一種方法可以保存用戶在表單中提供的數據,以便他不必再次輸入它們? – user1960836 2015-02-24 19:31:03

+1

只需將您的'RegisterNewUser'操作更改爲接受'httppost',以便您不需要參數,因爲發佈的對象將在Request中可用。然後再將該對象再次傳遞給你的局部視圖(你的局部視圖必須再次被強制輸入),你會看到前一個視圖。輸入的值將再次顯示:) – BabyDuck 2015-02-25 05:35:08