[英]Can't use codeblock in control property
抽象問題:我試圖將用戶在文本字段中的輸入限制為與列的數據庫長度相同。 因此,我想在html輸入上設置maxlength屬性,並且maxlength應該與數據庫中允許的最大長度相同。 我可以在整個前端對這些常量進行硬編碼,但是我試圖動態設置該值。
問題:telerik RadComboBox無法接受ASP代碼塊來設置屬性。 異常如下:
解析器錯誤
描述 :在解析服務於此請求所需的資源期間發生錯誤。 請查看以下特定的解析錯誤詳細信息,並適當地修改您的源文件。
解析器錯誤消息 :無法從其字符串表示形式'<%Utility.GetColumnMaxLength <Portfolio>(x => x.Title)%>'為'MaxLength'屬性創建類型為'System.Int32'的對象。
我創建了一個新的最小asp.net項目來重復該問題。 default.aspx源(后面沒有.cs代碼):
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TelerikCodeBlock._Default" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<%@ Import namespace="TelerikCodeBlock" %>
<%@ Import namespace="TelerikCodeBlock.DataModel" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<telerik:RadComboBox ID="txtboxTitle" runat="server" MaxLength="<% Utility.GetColumnMaxLength<Portfolio>(x => x.Title) %>" >
</telerik:RadComboBox>
</asp:Content>
Utility類已最小化為以下內容
namespace TelerikCodeBlock
{
public class Utility
{
public static int GetColumnMaxLength<T>(Expression<Func<T, object>> property)
{
// looks at Entity Framework metadata in real project ...
return 3;
}
}
}
數據模型看起來像
namespace TelerikCodeBlock.DataModel
{
public class Portfolio
{
public int Id { get; set; }
public string Title { get; set; }
}
}
可能的解決方法:使用ASP.NET表達式 (在<%$ ... %>
代碼塊),建立執行代碼,所概述的一般表達式這里 。
添加對Microsoft.CodeDom.Providers.DotNetCompilerPlatform
的引用。
在某處定義以下內容:
using System;
using System.CodeDom;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Compilation;
using System.Web.UI;
namespace TelerikCodeBlock
{
[ExpressionPrefix("Code")]
public class CodeExpressionBuilder : ExpressionBuilder
{
public override CodeExpression GetCodeExpression(BoundPropertyEntry entry,
object parsedData, ExpressionBuilderContext context)
{
return new CodeSnippetExpression(entry.Expression);
}
}
}
並在web.config中注冊
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5" >
<expressionBuilders>
<add expressionPrefix="Code" type="TelerikCodeBlock.CodeExpressionBuilder"/>
</expressionBuilders>
</compilation>
...
現在將asp控件更改為使用表達式代碼塊:
<telerik:RadComboBox ID="txtboxTitle" runat="server" MaxLength="<%$ Code: Utility.GetColumnMaxLength<Portfolio>(x => x.Title) %>" >
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.