2017-01-05 37 views
0

當用戶登錄時,正常的事情要做的就是不給密碼改回。我正在嘗試在MVC 5中做到這一點,但無法實現。我曾嘗試model.PASSWORD = "",以及ModelState.Clear(),但數據仍然顯示。的ModelState被清除,但數據仍顯示

控制器:

public async Task<ActionResult> Login(Login model) { 
    if(ModelState.IsValid) { 
     User temp = await db.Users.Where(u => u.USERNAME == model.USERNAME).FirstOrDefaultAsync(); 
     if(temp != null) { 
      try { 
       if(Password.VerifyPass(model.PASSWORD, temp.PASSWORD)) { 
        LoginUser(temp); 
        return RedirectToAction("Index", "EMR"); 
       } 
      } catch { } 
     } 
    } 
    ModelState.Clear(); 
    model.PASSWORD = ""; 
    ModelState.AddModelError("", "Username/password is unknown, or model was invalid!"); 
    return View(); 
} 

型號:

public class Login { 

     [Display(Name = "Username")] 
     public string USERNAME { get; set; } 

     [Display(Name = "Password")] 
     public string PASSWORD { get; set; } 
    } 
} 

查看:

@using(Html.BeginForm()) { 
    @Html.AntiForgeryToken() 
    <div class="form-horizontal"> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.USERNAME, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.USERNAME, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.USERNAME, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.PASSWORD, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.PASSWORD, new { htmlAttributes = new { @class = "form-control", @type = "password" } }) 
       @Html.ValidationMessageFor(model => model.PASSWORD, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Login" class="btn btn-success" /> 
      </div> 
     </div> 
    </div> 
} 

在觀看兩個ModelState中變量和VisualStudio中調試模式的模型變量,他們都表現出數據爲""。什麼可能造成這種情況?

+1

請問你的視圖代碼看起來像?你的視圖模型是怎樣的? – Shyju

+0

以爲我錯過了那裏的東西。編輯 –

+0

也許我缺少明顯的東西,但沒有任何理由,你正在使用@ Html.EditorFor()在@ Html.PasswordFor()? –

回答

1

正如我所評論的,一個可能的解決方案是簡單地使用@ Html.PasswordFor()。這將呈現語義上正確輸入密碼的輸入,隱式地提示瀏覽器不自動填充。所以,與其@ Html.EditorFor,試試這個:

@Html.PasswordFor(model => model.PASSWORD, new { htmlAttributes = new { @class = "form-control" }) 
1

你是不是通過模型退清它後進行查看。

return View(model); 

仍然沒有工作嘗試如下。

var newModel = new Login { Password = "" }; 
ModelState.Clear(); 
return View(newModel); 
+0

該頁面仍然返回以前輸入的任何建議的密碼。 –

+0

@CalebHuggins它看起來像是瀏覽器記錄輸入字段值並填充它們。 –

+0

現在,嘗試所有這些後,這是唯一可行的。我可能需要重新開始並重寫所有內容。 –

1

我認爲它是由於瀏覽器兌現,註釋登錄與

[OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)] 

除了行動

return View(model); 
+0

只是'[HttpGet]'或'[HttpPost]'或兩者兼而有之? –

+0

只是'[HttpPost]' – Kevorkian

0

@CalebHuggins它看起來是誰在rememberign的瀏覽器輸入字段值並填充它們。您可以嘗試將文本框的自動完成屬性設置爲「關閉」以避免這種情況。

你的模型綁定文本框可能像下面。

@Html.TextBoxFor(x => x.Something, new { autocomplete="off" }) 

Thnaks和問候, 阿赫亞Ranpariya

1

首先裝點您的密碼字段的數據類型Password

public class Login 
{  
     [Display(Name = "Username")] 
     public string USERNAME { get; set; } 

     [Display(Name = "Password")] 
     [DataType(DataType.Password)] 
     public string PASSWORD { get; set; }   
} 

並在視圖中使用PasswordFor輔助方法。

@Html.PasswordFor(x=>x.PASSWORD) 

有了這個,你不需要明確地設置密碼字段爲空字符串。 MVC會爲你做到這一點。

相關問題