2014-05-11 34 views
0

我創建了一個頁面,使用實體框架來檢索/顯示數據庫中的信息我也有在同一頁上的部分視圖中創建功能,但它不'保存/插入數據。ASP.NET MVC創建功能不工作在頁面

這裏是我的主頁查看:

@model IEnumerable<TerminalHost.Models.buildingInfo> 

@{ 
ViewBag.Title = "Home Page"; 
} 
<h3>We suggest the following:</h3> 
<ol class="round"> 
<li class="one"> 
    <h5>Please begin creating your network structure:</h5> <button id="modal-opener">Add a new building</button> 

</li> 
<li class="two"> 

</li> 
</ol> 

<div class="Container"> 

<div class="Box1"> 
    @foreach (var item in Model) 
     {<div> 
      <h4 class="Heading">@item.buildingName</h4> 
      <h4 class="Heading">@item.buildingNumber</h4> 
      <p>@item.buildingDesc1</p> 
      <p>@item.buildingDesc2</p> 
      <p>@item.buildingDesc3</p> 
     </div> 
     } 
</div> 
</div> 

<div id="Modal" title="Building Details"> 
@Html.Partial("buildForm", new TerminalHost.Models.buildingInfo()) 
</div> 

這裏是我的局部視圖:

@model TerminalHost.Models.buildingInfo 

@{ 
ViewBag.Title = "Create"; 
} 

<h2>Create</h2> 

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

<fieldset> 
<legend>buildingInfo</legend> 

<div class="editor-label"> 
    @Html.LabelFor(model => model.buildingNumber) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.buildingNumber) 
    @Html.ValidationMessageFor(model => model.buildingNumber) 
</div> 
.... 
</div> 
<p> 
    <input type="submit" value="Create" /> 
</p> 
</fieldset> 
} 
<div> 
@Html.ActionLink("Back to List", "Index") 
</div> 
@section Scripts { 
@Scripts.Render("~/bundles/jqueryval") 
} 

,這是我的控制器:

public class HomeController : Controller 
{ 
    thDB _db = new thDB(); 

    public ActionResult building() 
    { 
     var buildingModel = _db.buildings.ToList();//you have to remove the FirstOrDefault() extension method 

     return View(buildingModel); 
    } 

    public ActionResult buildForm() 
    { 
     return PartialView(); 
    } 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult buildForm(buildingInfo buildinginfo) 
    { 
     if (ModelState.IsValid) 
     { 
      _db.buildings.Add(buildinginfo); 
      _db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return PartialView(buildinginfo); 
    } 


    protected override void Dispose(bool disposing) 
    { 
     if(_db != null) 
     { 
      _db.Dispose(); 
     } 
     base.Dispose(disposing); 
    } 
} 

我已經嘗試複製與創建用於執行CRUD功能的腳手架模板相同的代碼,但它們被分離到不同的視圖中,而I希望他們都在一個頁面上。

+0

開始: 你能不能改變這一行:

@using (Html.BeginForm()) 

@using (Html.BeginForm("builForm","Home")) 

而在你的行動。它是否完全進入'buildForm(buildingInfo buildinginfo)'? –

回答

3

你需要的是告訴你的局部視圖要調用的動作。通過使用調試器

HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult buildForm(buildingInfo buildinginfo) 
{ 
    if (ModelState.IsValid) 
    { 
     _db.buildings.Add(buildinginfo); 
     _db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    return PartialView(buildinginfo);//instead of return this you can redirect to Index so you can see the update. Just a suggestion 
} 
+0

非常感謝你的作品,就像一個魅力! :d – ValMangul