【问题标题】:Inline markup blocks cannot be nested. Only one level of inline markup is allowed. MVC RAZOR内联标记块不能嵌套。只允许一级内联标记。 MVC 剃须刀
【发布时间】:2012-05-27 21:08:55
【问题描述】:

我是一个带有 Telerik 网格的模态窗口。但我需要在我的网格中渲染图像,所以我知道我不能使用 @ 两次。这是关于此问题的博客文章Link

谁能帮帮我。

我的代码

@{  Html.Telerik().Window()
    .Name("images")
    .Title("Select an Image")
    .Content(@<text>

@(Html.Telerik().ComboBox()
            .Name("AjaxComboBox66")
            .AutoFill(true)
            .SelectedIndex(0)
            .BindTo(new SelectList(Model.PhotoFolders, "ID", "Name"))
            .Filterable(filtering => filtering.FilterMode(AutoCompleteFilterMode.StartsWith))
            .HighlightFirstMatch(true)
            .ClientEvents(events => events
                .OnChange("onChange")
            )
      )

      @(Html.Telerik().Grid<AjaxImages>()
    .Name("Grid")
    .DataKeys(keys => keys.Add(c => c.ID))
  .Columns(columns =>
  {
      columns.Template(
          @<text>
               <img src='@item.Url' /> 
//Here is my error. I need helper function
           </text>

).Title("Picture");

  })

                              .DataBinding(dataBinding => dataBinding.Ajax().Select("GetImages", "UserProducts"))

                      .Scrollable(scrolling => scrolling.Enabled(true))
                      .Sortable(sorting => sorting.Enabled(true))
                          .Pageable(paging => paging.Enabled(true).PageSize(20).Total(100).Style(GridPagerStyles.NextPreviousAndNumeric))
                      .Filterable(filtering => filtering.Enabled(true))
                      .Groupable(grouping => grouping.Enabled(false))
                      .EnableCustomBinding(true)

                      .Footer(true))
              </text>)
    .Width(400)
    .Draggable(true)
    .Modal(true)
    .Visible(false)


    .Render();
} 

我的 GetImages 函数返回带有“ID”和“URL”的 json。

【问题讨论】:

    标签: asp.net-mvc-3 razor grid telerik


    【解决方案1】:

    在这些情况下,可以使用 MVC Razor 辅助函数。 使用网格控件定义创建辅助函数,在本例中为 RenderGrid()

    @helper RenderGrid()
    {
         @(Html.Telerik().Grid<AjaxImages>()
         .Name("Grid")
         .DataKeys(keys => keys.Add(c => c.ID))
         .Columns(columns =>
         {
             columns.Template(
             @<text>
                 <img src='@item.Url' /> 
             </text>
             ).Title("Picture");
         })
         .DataBinding(dataBinding => dataBinding.Ajax().Select("GetImages", "UserProducts"))
    }
    

    在窗口的内容定义中调用辅助函数。如果需要,可以多次调用辅助函数。

        @{Html.Telerik().Window()
          .Name("images")
          .Title("Select an Image")
          .Content(
           @<text>
              @RenderGrid()
           </text>)
          .Width(400)
          .Draggable(true)
          .Modal(true)
          .Visible(false)
          .Render();
    } 
    

    【讨论】:

    • 快完成了,请检查两个屏幕截图。我没有收到任何错误,但图像 为空。我试图呈现为文本,我的 ajax 正在工作。你知道为什么我没有得到我的图像吗? prntscr.com/9ix3aprntscr.com/9ix3x
    • 您使用的是ajax绑定,因此需要使用客户端模板,而不是服务器绑定模式模板。试试这个:columns.Bound(c =&gt; c.ID).ClientTemplate("&lt;img alt='&lt;#= ID #&gt;' src='&lt;#= Url #&gt;' /&gt;").Title("Picture");
    【解决方案2】:

    在以前的 MVC 中,@helper 被用作无法嵌套 @&lt;text&gt; 标记的解决方法。 但是在 MVC CORE @helper 中被省略了。在这里阅读更多:

    https://github.com/aspnet/Razor/issues/715

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签