1

請幫我理解爲什麼我的視圖模型被視圖返回爲空。我試圖在谷歌找到解決方案,但絕大多數的建議是添加隱藏。但對我來說將Html.HiddenFor沒有工作

這裏是我的代碼由View(PartialView)返回的ViewModel爲空

的ViewModels

public class MyViewModel 
{ 
    public FilterViewModel Filter {get; set;} 

    public MyViewModel() 
    { 
     Filter = new FilterViewModel(); 
    } 
} 

public class FilterViewModel 
{ 
    public IEnumerable<SelectListItem> TimeUnits { get; set; } 
    public string SelectedTimeUnit { get; set; } 
} 

控制器

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     MyViewModel model = new MyViewModel(); 
     model.Filter.TimeUnits = new SelectList(new string[] {"week", "month", "year"}); 

     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     *here I have empty model* 
     return View(); 
    } 
} 

查看

@model Mvc4WebApplication.Models.MyViewModel 

@using (Html.BeginForm()) 
{ 
    @Html.HiddenFor(m => m.Filter.SelectedTimeUnit) 
    @Html.Partial("_FilterPartial", Model.Filter) 

    <input type="submit" class="ok" value="OK" /> 
} 

PartialView

@model Mvc4WebApplication.Models.FilterViewModel 

<div class="select"> 
    <div class="background"> 
     @Html.DropDownListFor(m => m.SelectedTimeUnit, Model.TimeUnits as SelectList, "Select time unit", new { onchange = "FetchPeriods();" }) 
    </div> 
</div> 

Thanx提前。

UPD 生成的HTML看起來像

<form action="/" method="post"> 
    <input id="Filter_SelectedTimeUnit" name="Filter.SelectedTimeUnit" type="hidden" value=""> 
    <div class="select"> 
     <div class="background"> 
      <select id="SelectedTimeUnit" name="SelectedTimeUnit" onchange="FetchPeriods();"> 
       <option value="">Select time unit</option> 
       <option>week</option> 
       <option>month</option> 
       <option>year</option> 
      </select> 
     </div> 
</div> 
    <input type="submit" class="ok" value="OK"> 
</form> 
+0

什麼是生成的HTML是什麼樣子?另外,爲什麼你在'EditorTemplate'上使用部分'_FilterPartial'? – 2013-04-09 12:54:27

+0

我在上面的問題中添加了生成的html。我已經把這個簡單的例子。我在我的系統的幾個地方使用這個局部視圖 – Vic 2013-04-09 13:03:09

+0

爲什麼'SelectedTimeUnit'被引用兩次;一次作爲隱藏的輸入,第二次在局部視圖中?我也看不到'TimeUnits'。 – 2013-04-09 13:10:33

回答

0

不知道,如果你還在尋找4年後的答案,但我只是碰到了同樣的事情,發現這個解決方案:

更改

@Html.Partial("_FilterPartial", Model.Filter) 

@Html.Partial("_FilterPartial", Model.Filter, 
     new ViewDataDictionary(Html.ViewData) 
     { 
      TemplateInfo = new TemplateInfo { HtmlFieldPrefix = Html.NameFor(m => m.Filter).ToString() } 
     }) 

我找到了答案here

相關問題