如何在ASP.NET MVC中编写自定义的`@ Html.Partial()`方法?

问题描述 投票:0回答:3

我需要创建一个自定义的@Html.Partial()方法。

用例

我有一个.cshtml页面,其中有多个部分,如下所示

<!-- EDUCATION -->
@Html.Partial("Templates/Create/Modules/Education")

<!-- JOBS -->
@Html.Partial("Templates/Create/Modules/Jobs")

我希望能够创建自定义.Partial()方法。像这样的东西

@Html.CustomPartial("Templates/Create/Modules/Jobs", "jobs", "edit")

最后两个参数分别是module idaction type id。使用这些值,我将在我的CustomPartial中做出我需要在输出中显示的内容。

我不知道该如何解决这个问题。请指教。

或者,如果有人可以指向Html.Partial的源代码,那也非常有帮助。

asp.net-mvc asp.net-mvc-3 asp.net-mvc-5
3个回答
2
投票

您可以使用接受@Html.Partial()ViewDataDictionary的重载来完成此操作

@Html.Partial("Templates/Create/Modules/Jobs", new ViewDataDictionary { { "module", someValue }, {"edit", anotherValue }})

然后在局部

@if(ViewData["module"] == someValue)
{
  // do something
}
else
{
  // do something else
}

如果你仍然感兴趣,here is the source code


0
投票

这对我有用

public static class CustomHtmlHelpers
{
    public static MvcHtmlString RenderModule(this HtmlHelper helper,
                                             string partialViewName, 
                                             string moduleName,
                                             string actionType)
    {
        var isAccessAllowed = _someService.someMethod(userId, moduleName, actionType);    
        if (isAccessAllowed)
        {
            return helper.Partial(partialViewName);
        }
        else
        {
            return MvcHtmlString.Empty;
        }
    }
}

0
投票
      @Html.Partial("../Partial_views/_Menu_creation", new ViewDataDictionary { { "Type", 
     "Menu" }, { "Menu", "Dimensions" }, { "Active", "Yes" }, { "Icon", "icon-1" }, { 
     "data-hide", "" } })

In partial view
      @if (ViewData["Type"] == "Menu")
      {
         @if (ViewData["Active"] == "Yes")
          {
             <a data-check='@ViewData["Menu"]' role="button" class="active-menu">
               <b class='@ViewData["Icon"]'></b>
               <span>@ViewData["Menu"]</span>
            </a>
       }
       else
       {



    }
     }
     @if (ViewData["Type"] == "Heading")
     {
     }

This is working
© www.soinside.com 2019 - 2024. All rights reserved.