2015-11-06 106 views
1

我有一個表有12個字段,所有允許空,除了Id字段(主鍵),我使用mvc 5的數據庫第一工作流,在我的模型註釋全部12字段是必需的,我只在一個視圖中顯示四個字段,其餘視圖中顯示剩餘的四個字段,但在嘗試從具有四個字段的視圖向表中插入值時,它報告錯誤,表明有其他字段是必需的,如何我是否只插入這四個字段,並從其餘部分刪除所需的註釋?這裏是我的代碼:如何在mvc中插入模型屬性的一部分5

public ActionResult Estate(Customer cus) 
    { 
     try 
     { 
      var customer = new Customer 
      { 
       ClientId = cus.ClientId, 
       ClientGroup = cus.ClientGroup, 
       OrgName = cus.OrgName, 
       Branch = cus.Branch 

      }; 

      db.Customers.Add(customer); 
      db.SaveChanges(); 


     } 
     catch (Exception ex) 
     { 

      ModelState.AddModelError("",ex.Message); 
     } 

     return View(); 
    } 
+0

顯示客戶定義 –

+1

您是否在此創建客戶?如果這些字段是必需的,那麼你需要使用某些東西來填充它們 - 你可以使用一些默認值嗎? – markpsmith

+2

如果列可以爲空並且表單跨越多個請求,那麼猜猜看是什麼?字段*不是*必需的。因此,從您的模型註釋中刪除「必需」。 – David

回答

2

正如我在我的評論中提到,一個視圖模型可能使你的東西更容易。這裏是一些示例代碼。

假裝我有一個Person類,這是從實體框架

public class Person 
{ 
    [Required] 
    public string Firstname { get; set; } 

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

我想創建要求用戶輸入一個新值firstname一個視圖。這是我會怎麼做 - 創建將與視圖(.cshtml)文件關聯的視圖模型類:

public class HomeIndexViewModel 
{ 
    [Required] 
    public string Firstname { get; set; } 
} 

視圖模型只包含該視圖需要關心的性能。然後在控制器我可以這樣做:

public ActionResult Index() 
{ 
    var viewModel = new HomeIndexViewModel(); 

    return View(viewModel); 
} 

的觀點可能是這樣的:

@model WebApplication1.Controllers.HomeIndexViewModel @ { ViewBag.Title = 「主頁」; }

@using (Html.BeginForm()) 
{ 
    @Html.TextBoxFor(model => model.Firstname) 
} 

然後,當你發佈數據回控制器:

[HttpPost] 
public ActionResult Index(HomeIndexViewModel viewModel) 
{ 
    var person = new Person() { Firstname = viewModel.Firstname }; 

    // blah.... 
} 

當您發佈的數據備份,你不會遇到所造成的財產RandomStuff是空的驗證錯誤,因爲視圖模型不關心那個財產。視圖模型只包含視圖所需的數據,不超過該數據。 這是我一直都在做的事情。

+0

謝謝,它的工作原理! – UwakPeter

相關問題