2013-12-22 63 views
0

我有一個asp.net mvc4應用程序中的驗證消息中,我想使用的字段驗證:使用的Asp.net mvc4應用

我的模型類:

namespace sample_mvc4.Models 
{ 
    public class User 
    { 
     [Required(ErrorMessage="Enter le nom")] 
     public string Name; 
     [Required(ErrorMessage = "Enter l'émail")] 
     public string Email; 
     [Required(ErrorMessage = "pas de mdp!!!!")] 

     public string Password; 
    } 
} 

該控制器

public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View("Register"); 
     } 

     public ActionResult Register(User u) 
     { 
      if (ModelState.IsValid) 
      { 
      string s = u.Name; 
      return View("Index"); 
      } 
      else 
      { 
       return View(); 
      } 
     } 
    } 

最後視圖Register.cshtml

@model sample_mvc4.Models.User 

@{ 
    Layout = null; 
} 

    <!DOCTYPE html> 

    <html> 
    <head> 
     <meta name="viewport" content="width=device-width" /> 
     <link type="text/css" href="~/Content/Site.css" /> 
     <title>Register</title> 
    </head> 
    <body> 

      @using(Html.BeginForm("Register","Home")){ 
      @Html.ValidationSummary() 
      <p> Name: @Html.TextBoxFor(x => x.Name)</p> 
      <p> Email : @Html.TextBoxFor(x => x.Email)</p> 
      <p> Password : @Html.TextBoxFor(x=>x.Password)</p> 
       <input type="submit" value="Register" /> 
      } 

    </body> 
    </html> 

我的問題是:

  1. 當我讓一個領域或多個空,沒有出現錯誤信息,爲什麼呢?
  2. 在操作Register用戶對象的字段始終是所有空
  3. 當我提交表單,動作Register裏面,ModelState.IsValid需要總是如此

這些是什麼結果的原因是什麼?我如何修復我的代碼?

+1

只是一個說明。在成功(沒有顯示錯誤時)而不是返回View(...)時,您應該返回RedirectToAction(...)。否則,當你刷新刷新前的表格將被重新提交:) –

回答

2

的問題是,你在你的模型中使用的字段。但Asp.net MVC使用屬性進行驗證過程。更新你的模型是這樣,它會正常工作:

public class User 
{ 
    [Required(ErrorMessage = "Enter le nom")] 
    public string Name { get; set; } 

    [Required(ErrorMessage = "Enter l'émail")] 
    public string Email { get; set; } 

    [Required(ErrorMessage = "pas de mdp!!!!")] 
    public string Password { get; set; } 
} 

UPDATE1

您可以更新您的控制器是這樣的:

public ActionResult Index() 
    { 
     return RedirectToAction("Register"); 
    } 

    public ActionResult Register() 
    { 
     return View("Register"); 
    } 


    public ActionResult Register(User u) 
    { 
     if (ModelState.IsValid) 
     { 
      string s = u.Name; 
      return View("Index"); 
     } 
     else 
     { 
      return View(); 
     } 
    } 

或者你可以嘗試更新RouteCollection你的路由,所以默認行動將是註冊,而不是索引

+0

謝謝@Sergey。但是當我把'Html.BeginForm()'放在'Html.BeginForm(「Register」,「Home」)的地方時,我仍然遇到另一個問題。 –

+1

是的,它不起作用,因爲您返回索引操作的註冊視圖。並且默認情況下它使用當前操作。因此,如果您刪除「註冊」,「主頁」參數,那麼它將使用「索引」,「主頁」參數。 –

+1

我已更新回答 –

1

我相信驗證是檢查後的行動。因爲你正在重定向而不是檢查。只是建立新的頁面。添加一個新的方法來你的控制器

[HttpPost] 
public ActionResult Index(User model) 
{ 
    if(ModelState.IsValid){ 
     return RedirectToAction("Register"); 
    } 
    else{ 
     return view(model); 
    } 
} 

這將保持在頁面上是否有驗證問題