-1

我有两个视图,BatchReceipt 和 Receipt 使用相同的模型。到目前为止,他们一直使用相同的 ReceiptType 显示模板。但我希望一个排除某些项目,另一个排除完整列表(因此本质上是第二个 .cshtml 显示模板,称为 ReceiptTypeFull)。如何在 Visual Studio 中配置每个视图以利用不同的显示模板?

显示正在使用的代码的一些补充:

我有文件 ReceiptType.cshtml 被用作 DisplayTemplate ,其中包含以下设置收据下拉菜单

@using Clinton.Web.Helpers.EnumHelpers
@{
    var item = EnumsHelper.GetNameFromEnumValue(Model);
 }

我想使用不同的 DisplayTemplate,称之为 ReceiptTypeFull.cshtml

@using Clinton.Web.Helpers.EnumHelpersFull
@{
    var item = EnumsHelper.GetNameFromEnumValue(Model);
 }
@item

不同之处在于调用 enumhelper 或 enumhelperfull 来改变填充下拉列表的查询。我的问题是我看不到如何重定向视图以使用不同的 enumhelper/displaytemplate/

谢谢

4

1 回答 1

1

我想我明白你在说什么。您想控制视图中的 Enum 使用哪个模板。

我将解释使用编辑器模板,但如果您使用显示模板,它的工作方式相同。您应该能够遵循并申请您的方案。

这个想法是使用编辑器 html 助手的重载。

public static MvcHtmlString Editor(this HtmlHelper html, string expression, string templateName);

它是这样称呼的

@Html.Editor("{property name}", "{template name}").

下面是一个例子来展示它正在被使用。

假设我们有这个枚举

public enum MyItems
{

    Item1 = 1,
    Item2 = 2,
    Item3 = 3  
}

这个帮手

public static class MyEnumHelper
{
    public static List<MyItems> GetAllItems()
    {
         return new List<MyItems>()
         {
              MyItems.Item1,
              MyItems.Item2,
              MyItems.Item3
          };
     }

      public static List<MyItems> GetSomeItems()
      {
          return new List<MyItems>()
          {
              MyItems.Item1,
              MyItems.Item2                
           };
      }
}

这个控制器

public class HomeController : Controller
{      
    public ActionResult AllItems()
    {
        return View();
    }

    public ActionResult SomeItems()
    {
        return View();
    }
}

我们有这 2 个编辑器模板,它们放在 views/shared/editortemplates

第一个名为 MyItems.cshtml 是全部

@model MyItems?

 @{
  var values = MyEnumHelper.GetAllItems().Cast<object>()
      .Select(v => new SelectListItem
      {
         Selected = v.Equals(Model),
         Text = v.ToString(),
         Value = v.ToString()
       });
   }

@Html.DropDownList("", values)  

第二个叫做 MyItems2.cshtml 这是一些

@model MyItems?

@{
    var values = MyEnumHelper.GetSomeItems().Cast<object>()
        .Select(v => new SelectListItem
        {
            Selected = v.Equals(Model),
            Text = v.ToString(),
            Value = v.ToString()
        });
}

@Html.DropDownList("", values)  

然后在 AllItems.cshtml 中获取我们需要的调用的 MyItems.cshtml 模板

@model MyItemsViewModel  

@using (Html.BeginForm())
{    
    @Html.EditorFor(x => x.MyItem)    
    <submit typeof="submit" value="submit"/>
}

并在 SomeItems.cshtml 中通过调用 MyItems2.cshtml 来获取我们使用的一些项目

@model MyItemsViewModel

@using (Html.BeginForm())
{    
    @Html.Editor("MyItem", "MyItems2")   @* this bit answers your question *@
    <submit typeof="submit" value="submit" />
}
于 2019-09-16T20:10:43.377 回答