2013-04-23 93 views
1

我是新來的asp.net MVC。在下面的代碼中,我試圖添加一條記錄到數據庫。它工作正常,但它每次加載視圖時都會向數據庫添加一條空記錄。加載視圖時添加空記錄

型號:

public class multi 
    { 
     public int CategoryID { get; set; } 


     public string CategoryName { get; set; } 
     public string Description { get; set; } 

     public string DisplayName { get; set; } 
     public string Email { get; set; } 
    } 



public class CategoryRepository 
    { 

private BusDataClassesDataContext dc = new BusDataClassesDataContext(); 

public void Save() 
     { 
      dc.SubmitChanges(); 
     } 

     public void AddMulti(multi mu) 
       { 
        tblCategory cat = new tblCategory(); 
        cat.CategoryName = mu.CategoryName; 
        cat.Description = mu.Description; 

        tblUser user = new tblUser(); 
        user.DisplayName = mu.DisplayName; 
        user.Email = mu.Email; 

        dc.tblCategories.InsertOnSubmit(cat); 
        dc.tblUsers.InsertOnSubmit(user); 
       } 
    } 

控制器:

CategoryRepository cat = new CategoryRepository(); 

    public ActionResult AddMulti(multi mu) 
      { 
       if (ModelState.IsValid) 
       { 
        cat.AddMulti(mu); 
        cat.Save(); 
        return View(mu); 

       } 
       else 
       { 
        return View(mu); 

       } 
      } 

查看:

<% using (Html.BeginForm()) {%> 
     <%: Html.ValidationSummary(true) %> 

     <fieldset> 
      <legend>Fields</legend> 


      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.CategoryName) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBoxFor(model => model.CategoryName) %> 
       <%: Html.ValidationMessageFor(model => model.CategoryName) %> 
      </div> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.Description) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBoxFor(model => model.Description) %> 
       <%: Html.ValidationMessageFor(model => model.Description) %> 
      </div> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.DisplayName) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBoxFor(model => model.DisplayName) %> 
       <%: Html.ValidationMessageFor(model => model.DisplayName) %> 
      </div> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.Email) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBoxFor(model => model.Email) %> 
       <%: Html.ValidationMessageFor(model => model.Email) %> 
      </div> 

      <p> 
       <input type="submit" value="Create" /> 
      </p> 
     </fieldset> 

    <% } %> 

    <div> 
     <%: Html.ActionLink("Back to List", "Index") %> 
    </div> 
+0

你是否缺少模型中的[[Required]]? – 2013-04-23 07:40:06

回答

1

這是因爲你沒有驗證在你的模型上,所以ModelState.IsValid總是如此。然後,您通過AddMulti添加一個新類別。由於此控制器方法是唯一指定的方法,因此它用於GET和POST請求。這意味着,每次加載頁面並渲染表單時,都會在模型中創建一個空值的新記錄。

嘗試分裂您的控制器伸到HttpPostHttpGet方法:

[HttpPost] 
public ActionResult AddMulti(multi mu) 
{ 
    if (ModelState.IsValid) 
    { 
     cat.AddMulti(mu); 
     cat.Save(); 
     return View(mu); 
    } 
    else 
    { 
     return View(mu); 
    } 
} 

[HttpGet] 
public ActionResult AddMulti() 
{ 
    return View(); 
} 

現在,當您通過GET請求訪問的網頁(即當您第一次訪問它,發佈形式之前),第二個動作方法被激發,所以你不會創建新的記錄。

您還可能想要爲模型添加一些驗證屬性。因爲它看起來像是將域模型直接傳遞給視圖,所以還應該考慮創建單獨的view models

+0

你好,我添加HttpPost在我的控制器method.Now我得到「404頁未找到錯誤」 – chamara 2013-04-23 07:56:58

+0

這是因爲你還需要創建上面顯示的'HttpGet'方法。現在您的以前的方法只是POST,除非您創建單獨的方法,否則沒有任何操作可以處理GET請求。 – 2013-04-23 07:58:34

+0

我在哪裏添加此方法?無法在同一個cotroller類中添加相同參數類型的方法 – chamara 2013-04-23 08:08:00