2014-02-13 24 views
0

如何讓我的Name字段在我的api模型中獨一無二?如何讓我的名字字段獨一無二

using System.ComponentModel.DataAnnotations; 

namespace API.Models 
{ 
    public class Users 
    { 
     public int Id { get; set; } 

     [Required] 
     public string Name { get; set; } 

     public string FullName { get; set; } 

     [Required] 
     public string PasswordHash { get; set; } 
    } 
} 
+0

'unique'對於什麼將它們添加到ModelState中注入錯誤信息? –

+0

我會使名稱字段唯一。像用戶名。 – user2122729

+0

這通常會以某種形式映射到例如一個數據庫。因此,細節通常取決於您使用的是哪種數據層技術。 –

回答

1

這不是您可以從ViewModel/Client端檢查而不檢查數據庫中現有的值。

我所做的是當我去保存實體/對象時,我做了一個數據庫查找,它會通過驗證或驗證失敗。

繼承人使用實體框架/ LINQ的

using(var db = new DbContext()) 
{ 
    return db.User.Any(x => x.Name.Equals(modelName, StringComparison.IgnoreOrdinalCase)) 
          ? false : true; 
} 

一個例子你沒有說你使用的是什麼平臺,所以它很難給你更具體的建議。

編輯:

如果是MVC Razor,這很容易。您可以通過使用正確的模型屬性名

[HttpPost] 
public ActionResult AddUser(AddUserModel model) 
{ 
    if(ModelState.IsValid) 
    { 
     // input parameters passed - now check for uniqueness in db 
      using(var db = new DbContext()) 
      { 
       if(!db.User.Any(x => x.Name.Equals(model.Name, StringComparison.IgnoreOrdinalCase))) 
       { 
        // Add to database 
        return; 
       } 
       else 
       { 
        // hard code string or get model property name via reflection etc 
        // Or if you want a general error you can use string.Empty as the key name and display via the validation summary 
        ModelState.AddModelError("Name", "Name must be unique"); 

        // Fall through and return error 
       } 
      }    
    } 
    return View(model); 
} 

//查看

// if you've used the helper this will all you need to show 
@Html.ValidationMessageFor(x => x.Name) 
// Or.. 
@Html.ValidationSummary(true) 
+0

mvc/razor c#無論如何,謝謝我會嘗試 – user2122729

+0

在web api中怎麼樣?像遠程驗證? – user2122729