Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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
C# 用于不渲染的MVC显示_C#_Asp.net Mvc_Display Templates - Fatal编程技术网

C# 用于不渲染的MVC显示

C# 用于不渲染的MVC显示,c#,asp.net-mvc,display-templates,C#,Asp.net Mvc,Display Templates,我对MVC5应用程序中的自定义显示模板有问题。我有一个viewmodel,其中包含一个我想要重用的复杂类型。我创建了DisplayTemplates文件夹,并放置了一个符合正确命名约定的局部视图。一切似乎都正常工作,局部视图被调用,但浏览器上没有任何渲染 我已经检查了呈现的html,以确保它没有被隐藏或显示,但实际上html输出中没有呈现任何内容。请参见下面的相关屏幕截图。我做错了什么?谢谢 文件夹结构 这是初步的看法。viewmodel有一个可用选项列表。foreach调用displayfo

我对MVC5应用程序中的自定义显示模板有问题。我有一个viewmodel,其中包含一个我想要重用的复杂类型。我创建了DisplayTemplates文件夹,并放置了一个符合正确命名约定的局部视图。一切似乎都正常工作,局部视图被调用,但浏览器上没有任何渲染

我已经检查了呈现的html,以确保它没有被隐藏或显示,但实际上html输出中没有呈现任何内容。请参见下面的相关屏幕截图。我做错了什么?谢谢

文件夹结构

这是初步的看法。viewmodel有一个可用选项列表。foreach调用displayfor

@model CustomerWebPortal.ViewModels.OrderVehicle
@使用(Html.BeginForm(“CreateOrder”,“Home”))
{
@DisplayFor(x=>x.DisplayName)
    @Html.Raw(Model.Description)
可用选项
@foreach(Model.AvailableOptions中的var选项) { DisplayFor(x=>option,“AvailableOption”); } 顾客
@LabelFor(x=>x.Customer) @Html.TextBoxFor(x=>x.Customer) @Html.ValidationMessageFor(x=>x.Customer) @Html.HiddenFor(x=>x.VehicleId) @Html.HiddenFor(x=>x.Price)
}
这是问题的注释,但我使用Html.Raw编写了一个小测试应用程序,显然它也可以解决您的问题。它只需要在Html.DisplayFor前面加一个“@”

ViewModel(在我的例子中,垃圾数据)

公共类索引模型
{
私人可计算的(avlOpt);;
公共IEnumerable可用选项
{
获取{return\u avlOpt;}
设置{u avlOpt=value;}
}
公共索引模型()
{
List lstString=新列表();

对于(inti=1;i如果你是个傻瓜,像我一样,请确保你没有为值类型创建一个空白的DisplayTemplate

在我的例子中,我尝试了一些东西,但分心了,在DisplayTemplates文件夹中留下了一个名为string.cshtml的空文件,并在返回后花了一个小时试图找出我的值停止显示的原因


不要那样做

1)您在此处向我们展示了哪些视图?2)您是否包含了
@model IEnumerable
声明?3)将文件夹移动到
视图/共享/显示模板
。第二个图像是显示模板的内容吗?此外,请尝试发布真实的代码而不是图像。如果您正在发布,为什么要在主视图文件夹中放置子文件夹如果你需要为此创建一个路由定义,我建议避免这种情况。它是否只需要在Html助手前面加一个“@”就可以了?我对MVC很陌生,但我使用Raw和一些标记创建了一个类似的循环,只是为了测试。它的行为与你用“Html.Raw…”描述的相同,但它与“@Html.Raw…”一起工作我的测试似乎不同意,但再次强调,我是一个初学者。可能Raw与DisplayFor或其他东西的处理方式不同。这对我也不起作用。我认为区别在于你的集合是一个基本类型的集合,而我的availableoptions是一个复杂类型。我创建了一个测试项目,该项目再现了错误。链接是在主要问题中。谢谢。@或使用raw?我不是说使用raw。我只是要求你在Html.DisplayFor前面放一个@。我知道它在代码块中。试试看。忽略raw。只是在前面放一个@试试。啊……先生是对的。奇怪,因为我确信你在代码块中不需要它。或者修复它的方式。谢谢你的时间。我认为剃须刀引擎中发生了一些变化。其他人也提到了代码块…很明显,以前是这样的。
public class IndexViewModel
{
    private IEnumerable<string> _avlOpt;

    public IEnumerable<string> AvailableOptions
    {
        get { return _avlOpt; }
        set { _avlOpt = value; }
    }

    public IndexViewModel()
    {
        List<string> lstString = new List<string>();
        for (int i=1;i<5;i++)
        {
            lstString.Add(@"<h" + i.ToString() + ">Test</h" + i.ToString() + ">");
        }
        AvailableOptions = lstString;
    }
}
 test<br/>
 @foreach (var option in Model.AvailableOptions)
 {
   @Html.Raw(option);
 }
<br/>end test
<div>
test<br/>
<br/>end test
</div>
<div>
test<br/>
<h1>Test</h1><h2>Test</h2><h3>Test</h3><h4>Test</h4>    <br/>end test
</div>