2015-02-24 114 views
0

我正在與MongoDB結合使用小型ASP.NET MVC 4應用程序。目前我有4個視圖:索引,創建,列表,編輯。創建是一種將數據放入數據庫的表單。列表是顯示數據的列表。編輯是一種編輯數據的表單。這三個視圖在「索引」視圖(RenderAction)內呈現。隱藏/查看編輯查看錶格

目標是在索引視圖內只顯示兩個視圖。索引與創建的組合或索引與編輯的組合。

在這一刻我在與編輯視圖的問題(控制器內):

[HttpGet] 
public ActionResult Edit(string id) 
     { 
       Car car = CarRentalContext.Cars.FindOneById(new ObjectId(id)); 
       return View(car.ConvertToUpdateViewModel()); 
     } 

編輯觀點:

@model MvcApplication1.ViewModels.UpdateCarViewModel 

@using (Html.BeginForm()) { 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend>UpdateCarViewModel</legend> 

     @Html.HiddenFor(model => model.Id) 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Make) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Make) 
      @Html.ValidationMessageFor(model => model.Make) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.NumberOfDoors) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.NumberOfDoors) 
      @Html.ValidationMessageFor(model => model.NumberOfDoors) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.DailyRentalFee) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.DailyRentalFee) 
      @Html.ValidationMessageFor(model => model.DailyRentalFee) 
     </div> 

     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 
} 

索引視圖:

@model MvcApplication1.ViewModels.InsertCarViewModel 

@{ 
    Layout = null; 
} 

<!DOCTYPE html> 

<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Index</title> 
</head> 
<body> 

    <div> 
     @{Html.RenderAction("Create", Model);} 
    </div> 

    <div> 
     @{Html.RenderAction("List", Model);} 
    </div> 

    <div> 
     @{Html.RenderAction("Edit", Model);} 
    </div> 
</body> 
</html> 

顯然編輯視圖需要顯示一個ID,並且當我使用RenderAction時,它會得到一個錯誤,因爲存在當我啓動應用程序時沒有ID。我不想在不需要的時候隱藏這個視圖,只在需要時才顯示這個視圖。我怎麼能沒有Javascript/JQuery的存檔。

我需要一個if/else語句在我的ActionResult裏面嗎?

+0

你可以發佈你現有的'查看' – ediblecode 2015-02-24 13:32:34

+0

我編輯了我的問題。在我的索引視圖中,我有3個div,每個div都有一個'@ {Html.RenderAction(「View」,Model);}' – bbvanee 2015-02-24 13:36:32

+0

我想看看你的'Index'視圖,道歉。 – ediblecode 2015-02-24 13:37:33

回答

1

做的是隻檢查是否id有值

[HttpGet] 
public ActionResult Edit(string id) 
{ 
    if (String.IsNullOrEmpty(id)) 
    { 
     return null; 
    } 

    Car car = CarRentalContext.Cars.FindOneById(new ObjectId(id)); 
    return View(car.ConvertToUpdateViewModel()); 
} 
+0

我試過這段代碼,它確實有效。但是當我用Create表單輸入數據時,我將這些字段留空,驗證確保數據不會進入數據庫。這工作正確。但是當我點擊同一個按鈕時,Edit窗體顯示。我認爲這是因爲它獲得了一個ID? – bbvanee 2015-02-24 14:31:39

0

這不是一個問題,在MVC編輯控制器通常有一個id PARAM,所以要消除您的問題,您可以最簡單最快捷的事情只是檢查ID是否存在,像這樣:

[HttpGet] 
public ActionResult Edit(string id) 
{ 
     Car car = CarRentalContext.Cars.FindOneById(new ObjectId(id)); 

     if (car != null) 
     { 
      return View(car.ConvertToUpdateViewModel()); 
     } 

     //if we get this far show other view 
     return View(); 
}