2014-03-06 56 views
2

我有一個剃刀視圖列出了多個項目。回發時,我想從視圖中獲取模型,以便我可以獲取數據,但是當我回發時,模型數據的空值爲空。我想知道如何從控制器中的視圖中提取數據。 這是我有:模型數據爲空視圖回傳mvc4剃鬚刀

查看:

@using Solution.Web.Models 
@model ItemsViewModel 
@{ 
    ViewBag.Title = "Select Items"; 
} 
@using (Html.BeginForm()) 
{ 
foreach (var p in Model.Items) 
{ 
     <div class="well">  
     <span class="pull-right label label-primary">@p.Price.ToString("c")</span> 
     <span class="lead"><input type="checkbox" data-id="@p.Id" id="Model.Selected" checked="@p.Selected" value="@p.Id" /> @p.Quantity x @p.Name</span>   
    </div>  
} 
    <div class="well">   
     <button type="submit" class="btn btn-lg btn-block btn-primary">Pay with Card</button> 
     <button type="submit" class="btn btn-lg btn-block btn-primary">Pay with PayPal</button> 
    </div> 

} 

控制器:

[HttpGet] 
public ActionResult Index() 
{ 
    ItemsViewModel model = new ItemsViewModel 
    { 
     Items = repository.Items 
     .OrderBy(i => i.Id) 
     }; 
     return View(model); 
    } 

[HttpPost] 
public ActionResult Index(ItemsViewModel items) 
{ 
return View("NextStep"); 
} 

所以在HttpPost,當我得到的模型回來,我都要空。如何在回發中獲取正確的數據集?

這是ItemsViewModel代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using Solution.Domain.Entities; 

namespace Solution.Web.Models 
{ 
    public class ItemsViewModel 
    { 
     public IEnumerable<Item> Items; 
    } 
} 

預先感謝每一個評論,Laziale

回答

1

爲了您的數據和操作的參數映射,你的輸入必須聲明他們的名字。因此,改變你的看法是這樣的:

@using (Html.BeginForm()) 
{ 
for (var i = 0; i < Model.Items.Count(); i++) 
{ 
     @{ 
      var p = Model.Items[i]; 
     } 
     <div class="well">  
     <span class="pull-right label label-primary">@p.Price.ToString("c")</span> 
     <span class="lead"> @Html.CheckBoxFor(m => Model.Items[i].Selected, new {"data-id" = p.Id }) @p.Quantity x @p.Name</span>   
    </div>  
} 
    <div class="well">   
     <button type="submit" class="btn btn-lg btn-block btn-primary">Pay with Card</button> 
     <button type="submit" class="btn btn-lg btn-block btn-primary">Pay with PayPal</button> 
    </div> 

} 
0

這是因爲標籤,要序列化模型的實例的id/name屬性。請嘗試更改ID到項目:

<span class="lead"><input type="checkbox" data-id="@p.Id" id="Items" checked="@p.Selected" value="@p.Id" /> @p.Quantity x @p.Name</span> 

如果輸入的是代表您的項目,我不知道,也許這是你的整個DIV:

<div class="well" id="Items">  
    <span class="pull-right label label-primary">@p.Price.ToString("c")</span> 
    <span class="lead"><input type="checkbox" data-id="@p.Id" id="Model.Selected" checked="@p.Selected" value="@p.Id" /> @p.Quantity x @p.Name</span>   
</div> 
0

讓MVC生成與控制複選框nameSelected[0], Selected[1]屬性。您需要使用內置的MVC輔助類像下面

foreach (var p in Model.Items) 
{ 
     <div class="well">  
     <span class="pull-right label label-primary">@p.Price.ToString("c")</span> 
     <span class="lead"> 
     @Html.CheckBoxFor(m=>m.Selected,{data_id=m.Id}) 
     @p.Quantity x @p.Name</span>   
    </div>  
} 

選項2:

@counter=1; 

foreach (var p in Model.Items) 
{ 

     <div class="well">  
     <span class="pull-right label label-primary">@p.Price.ToString("c")</span> 
     <span class="lead"> 
     <input type="checkbox" data-id="@p.Id" id="Model.Selected" 
     checked="@p.Selected" value="@p.Id" name="Selected[@counter]" /> 
     @p.Quantity x @p.Name</span>   
    </div>  
    @counter++; 
}