相关疑难解决方法(0)

从Expression <Func <TModel,TProperty >>获取属性,作为字符串

我使用了一些强类型表达式,这些表达式被序列化以允许我的UI代码具有强类型排序和搜索表达式.这些是类型的Expression<Func<TModel,TProperty>>并且如此使用:SortOption.Field = (p => p.FirstName);.对于这个简单的案例,我已经完美地完成了这项工作.

我用来解析"FirstName"属性的代码实际上重用了我们使用的第三方产品中的一些现有功能,并且它工作得很好,直到我们开始使用深层嵌套的属性(SortOption.Field = (p => p.Address.State.Abbreviation);).此代码在支持深层嵌套属性的需求方面有一些非常不同的假设.

至于这段代码的作用,我并不是真的理解它而不是改变代码,我想我应该从头开始编写这个功能.但是,我不知道这样做的方法.我怀疑我们可以做一些比做ToString()和执行字符串解析更好的事情.那么有什么好办法来处理琐碎和深层嵌套的案例呢?

要求:

  • 鉴于表达式p => p.FirstName我需要一串"FirstName".
  • 鉴于表达式p => p.Address.State.Abbreviation我需要一串"Address.State.Abbreviation"

虽然对我的问题的答案并不重要,但我怀疑我的序列化/反序列化代码对将来发现这个问题的其他人有用,所以它在下面.同样,这段代码对这个问题并不重要 - 我只是觉得它可能对某些人有所帮助.请注意,DynamicExpression.ParseLambda它来自动态LINQ的东西,Property.PropertyToString()这是这个问题的关键.

/// <summary>
/// This defines a framework to pass, across serialized tiers, sorting logic to be performed.
/// </summary>
/// <typeparam name="TModel">This is the object type that you are filtering.</typeparam>
/// <typeparam name="TProperty">This is the property on the …
Run Code Online (Sandbox Code Playgroud)

c# lambda

53
推荐指数
4
解决办法
3万
查看次数

ValidationMessageFor与AddModelError(key,message)一起使用.关键是什么?

我正在为某个viewModel属性开发客户端和服务器端验证.

.cshtml文件中我把它:

@Html.DropDownListFor(model => model.EntityType.ParentId, Model.ParentTypeList, "")
@Html.ValidationMessageFor(model => model.EntityType.ParentId)
Run Code Online (Sandbox Code Playgroud)

在Controller中进行业务验证

catch (BusinessException e)
{
    ModelState.AddModelError("EntityType.ParentId", Messages.CircularReference);
}
Run Code Online (Sandbox Code Playgroud)

以上工作符合预期:如果捕获到异常,则消息将显示在下拉列表旁边.

但是,我发现这种方式并不是很优雅.在cshtml,我使用一种方法来生成有关验证的所有必需信息.在控制器中,我必须知道确切的Key字符串并使用它.

这样做有没有更好的方法?

c# asp.net razor asp.net-mvc-3

13
推荐指数
1
解决办法
4373
查看次数

"十进制"类型和格式的html助手?

属性:

public decimal Cost { get; set; }

html助手:

<%: Html.TextBoxFor(m => m.Cost)%>

问题:当我设置Cost属性时,如何格式化它?例如显示两个小数点的精度?

c# format asp.net-mvc

6
推荐指数
3
解决办法
3万
查看次数

标签 统计

c# ×3

asp.net ×1

asp.net-mvc ×1

asp.net-mvc-3 ×1

format ×1

lambda ×1

razor ×1