Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 视图(PartialView)返回的ViewModel为空_Asp.net Mvc 4_Asp.net Mvc Partialview_Asp.net Mvc Viewmodel - Fatal编程技术网

Asp.net mvc 4 视图(PartialView)返回的ViewModel为空

Asp.net mvc 4 视图(PartialView)返回的ViewModel为空,asp.net-mvc-4,asp.net-mvc-partialview,asp.net-mvc-viewmodel,Asp.net Mvc 4,Asp.net Mvc Partialview,Asp.net Mvc Viewmodel,请帮助我理解为什么视图返回的视图模型为空。我试图在谷歌上找到解决方案,但绝大多数建议都是添加隐藏内容。但对我来说,添加Html.HiddenFor不起作用 这是我的密码 视图模型 public class MyViewModel { public FilterViewModel Filter {get; set;} public MyViewModel() { Filter = new FilterViewModel(); } } public

请帮助我理解为什么视图返回的视图模型为空。我试图在谷歌上找到解决方案,但绝大多数建议都是添加隐藏内容。但对我来说,添加Html.HiddenFor不起作用 这是我的密码

视图模型

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; }
}
查看

@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" />
}
@model Mvc4WebApplication.Models.MyViewModel
@使用(Html.BeginForm())
{
@Html.HiddenFor(m=>m.Filter.SelectedTimeUnit)
@Html.Partial(“\u FilterPartial”,Model.Filter)
}
局部视图

@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>
@model Mvc4WebApplication.Models.filtervewmodel
@Html.DropDownListFor(m=>m.SelectedTimeUnit,Model.TimeUnits作为SelectList,“选择时间单位”,新建{onchange=“FetchPeriods();”)
提前准备好

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>

选择时间单位
周
月
年

我不确定4年后你是否还在寻找答案,但我遇到了同样的问题,找到了这个解决方案:

换衣服

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


我找到了答案

生成的HTMl是什么样子的?另外,为什么要在
编辑器或模板上使用部分
\u FilterPartial
?我已经在上面的问题中添加了生成的html。我在这里举了一个简单的例子。我在系统中的多个位置使用此局部视图为什么
SelectedTimeUnit
被引用了两次;一次作为隐藏输入,第二次在局部视图中?我也从未看到显示
TimeUnits
@Html.Partial("_FilterPartial", Model.Filter)
@Html.Partial("_FilterPartial", Model.Filter,
       new ViewDataDictionary(Html.ViewData)
       {
            TemplateInfo = new TemplateInfo { HtmlFieldPrefix = Html.NameFor(m => m.Filter).ToString() }
       })