小编que*_*en3的帖子

ASP.NET MVC局部视图:输入名称前缀

假设我有ViewModel之类的

public class AnotherViewModel
{
   public string Name { get; set; }
}
public class MyViewModel
{
   public string Name { get; set; }
   public AnotherViewModel Child { get; set; }
   public AnotherViewModel Child2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在视图中,我可以渲染部分

<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
Run Code Online (Sandbox Code Playgroud)

在部分我会做

<%= Html.TextBox("Name", Model.Name) %>
or
<%= Html.TextBoxFor(x => x.Name) %>
Run Code Online (Sandbox Code Playgroud)

但是,问题是两者都将呈现name ="Name",而我需要name ="Child.Name"才能使模型绑定器正常工作.或者,当我使用相同的局部视图渲染第二个属性时,name ="Child2.Name".

如何使我的局部视图自动识别所需的前缀?我可以将它作为参数传递,但这太不方便了.当我想要例如以递归方式呈现它时,情况会更糟.有没有办法用前缀渲染部分视图,或者更好的是,通过自动重新调用lambda表达式来实现

<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
Run Code Online (Sandbox Code Playgroud)

会自动添加正确的"孩子".生成的名称/ id字符串的前缀?

我可以接受任何解决方案,包括第三方视图引擎和库 - 我实际上使用Spark View引擎(我使用它的"解决"问题)和MvcContrib,但没有在那里找到解决方案.XForms,InputBuilder,MVC v2 - 提供此功能的任何工具/洞察都会很棒.

目前我考虑自己编码,但这似乎是浪费时间,我不敢相信这些琐碎的东西还没有实现.

可能存在许多手动解决方案,欢迎所有这些解决方案.例如,我可以强制我的部分基于IPartialViewModel <T> {public string Prefix; T模型; …

asp.net-mvc spark-view-engine mvccontrib

119
推荐指数
7
解决办法
5万
查看次数

使页面告诉浏览器不要缓存/保留输入值

大多数浏览器缓存形成输入值.因此,当用户刷新页面时,输入具有相同的值.

这是我的问题.当用户单击"保存"时,服务器将验证POSTed数据(例如,已检查的产品),如果无效,则将其发送回浏览器.但是,如上所述,即使服务器清除某些值的选择,由于浏览器缓存,它们仍可能被选中!我的数据不可见(直到选中父项)复选框,因此用户可能甚至不知道仍然选择了某些先前的值,直到再次单击"保存"并收到错误消息 - 即使用户认为不是.哪个很烦人.

这可以通过Ctrl-F5解决,但它甚至不是解决方案.是否有一种自动/编程方式告诉浏览器不要在某个表单/页面上缓存表单输入数据?

html browser forms browser-cache

110
推荐指数
5
解决办法
16万
查看次数

ASP.NET MVC:Mock controller.Url.Action

我的ASP.NET MVC应用程序中的菜单的URL是从控制器/操作生成的.所以,他们打电话

controller.Url.Action(action, controller)
Run Code Online (Sandbox Code Playgroud)

现在,我如何在单元测试中完成这项工作?我成功使用MVCContrib

var controller = new TestControllerBuilder().CreateController<OrdersController>();
Run Code Online (Sandbox Code Playgroud)

但是无论我尝试用它做什么,我都会得到controller.Url.Action(动作,控制器)失败并且NullReferenceException因为Url == null.

更新:它不是关于如何拦截HttpContext.我通过几种方式做到了这一点,使用MVCContrib,Scott Hanselman的假装示例,以及http://stephenwalther.com/blog/archive/2008/07/01/asp-net-mvc-tip-12-faking -the-controller-context.aspx.这对我没有帮助,因为我需要知道假的值是什么......是ApplicationPath吗?我该如何设置?是否需要匹配被调用的控制器/动作?也就是说,Url.Action如何工作以及如何满足它?

另外,我知道我可以做IUrlActionAbstraction并继续使用它...但我不确定我是否想这样做.毕竟,我有MVCContrib/Mock全功率,为什么我需要另一个抽象.

asp.net-mvc

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

将字符串解析为C#lambda Func

有没有办法将lambda的字符串表示转换为lambda Func?

Func<Product, bool> func = Parse<Product, bool>("product => product.Name.Length > 0");
Run Code Online (Sandbox Code Playgroud)

我尝试了动态LINQ但它没有按预期工作 - 例如它不期望lambda语法=>.

答案摘要:

  • 编写我自己的C#编译器 - 非常有趣
  • 启动外部编译器(如csc.exe) - 非常慢
  • 使用DLINQ - 正如我所说,我不知道它如何解析lambda表达式

为什么我需要这个:因为没有办法将lambdas传递给自定义属性,比如

[Secure(role => role.CanDoThis && role.AllowedCount > 5)]
Run Code Online (Sandbox Code Playgroud)

因此,作为一种解决方法,我想将lambda作为字符串传递:"role => role.CanDoThis && role.AllowedCount> 5".但似乎我必须像这样使用DLINQ:"CanDoThis && AllowedCount> 5" - 因为这是它理解的语法.但我的问题是关于真正的lambdas,我在询问时已经使用过DLINQ了.

c# linq

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

C#对象的事务?

只是好奇,是否支持普通C#对象上的事务?喜欢

using (var transaction = new ObjectTransaction(obj))
{
  try
  {
    obj.Prop1 = value;
    obj.Prop2 = value;
    obj.Recalculate(); // may fire exception
    transaction.Commit(); // now obj is saved
  }
  except
  {
     transaction.Rollback(); // now obj properties are restored
  }
}
Run Code Online (Sandbox Code Playgroud)

只是为了让答案更有用;-)其他语言有什么相似之处吗?

STM更新:这是它声称的内容:

atomic {
  x++;
  y--;
  throw;
}
Run Code Online (Sandbox Code Playgroud)

将保持x/y不变,包括链式方法调用.看起来像我要求的.至少它非常有趣.我认为这已足够接近了.此外,其他语言也有类似的东西,例如Haskell STM.注意我没说它应该用于生产;-)

c#

20
推荐指数
2
解决办法
7581
查看次数

跟踪gcc编译和什么代码减慢它

我想找出什么代码导致gcc编译时间慢.我以前有一个代码正在缓慢编译,有人告诉我命令行开关,使gcc打印它编译的每一步,包括每个函数/变量/符号等.这有很大的帮助(我可以在控制台中看到gcc chokes),但我忘记了什么是转换.

c++ linux gcc

17
推荐指数
3
解决办法
1622
查看次数

在c ++/gcc中优化模板编译时间

在一个大型项目中,我们有很多类(数千个),并且对于每个类,使用typedef定义了一个特殊的智能指针类型.此智能指针类型是模板类.当我用"gcc -Q"编译时,我发现花了很多时间为每个类编译这些智能指针.这就是我看到smartptr<class1>::methods, then smartptr<class2>::methods... smartptr<class2000>::methods在gcc处理它们时在屏幕上滚动.

有加速这个过程的技巧吗?从smartptr的角度来看,这些类都是相同的,没有enable_if技巧等.

我现在正在尝试的事情:

  • 也许用很少的常用方法创建一个非模板基类
  • 使用extern模板类来减少链接符号(和实例化时间?还不确定)

但以上所有都不是一个完整的解决方案.我想知道是否有另一种方法可以优化编译时间,这是一个让gcc知道的技巧,例如,一旦它在看到其他特化时反复应用相同的知识就解析了smartptr,因为生成代码是相同的.

是的,我知道这是不是一样,当然......但是,这只是一个疯狂的想法.

或者也许还有其他我不知道的技巧,可以加快编译速度.(只是为了说明我正在谈论的内容,我们可以通过消除其静态成员数据实例来优化另一个模板,这大大减少了编译时间.这根本不明显.)

c++ linux gcc templates g++

17
推荐指数
1
解决办法
1321
查看次数

强制链接未使用的共享库

从gcc 4.5移到gcc 4.6,现在它不链接到编译时未使用的库(即,如果没有从它们导入符号).

但是,这些库的目的是它们执行静态构造函数,从而使它们在运行时可用于应用程序(注册它们的符号).

有没有办法强制gcc链接到通过-l列出的所有库?

c++ linux gcc

15
推荐指数
1
解决办法
4453
查看次数

如何在构建时始终运行命令而不管任何依赖?

我想运行一个解析整个源代码树的cmake命令,所以我无法在cmake的add_custom_command/add_custom_target命令中列出所有可能的依赖项.

有没有可能告诉cmake只是在没有任何条件的情况下运行命令?我尝试了在网上找到的所有解决方案(包括SO),但他们都假设该命令依赖于几个已知的最新文件.

我找到了一个解决方案,但它无法可靠地工作:

cmake_minimum_required(VERSION 2.6)

project(main)

add_custom_command(
   OUTPUT file1
   COMMAND echo touching file1
   COMMAND touch file1
   DEPENDS file2)
add_custom_target(dep ALL DEPENDS file1 file2)

# this command re-touches file2 after dep target is "built"
# and thus forces its rebuild
ADD_CUSTOM_COMMAND(TARGET dep
          POST_BUILD
          COMMAND echo touching file2
          COMMAND touch file2
)
Run Code Online (Sandbox Code Playgroud)

这是输出:

queen3@queen3-home:~/testlib$ make
[100%] Generating file1
touching file1
touching file2
[100%] Built target dep
queen3@queen3-home:~/testlib$ make
[100%] Generating file1
touching file1
touching file2
[100%] Built target dep
queen3@queen3-home:~/testlib$ make
touching …
Run Code Online (Sandbox Code Playgroud)

cmake

15
推荐指数
4
解决办法
2万
查看次数

DDD:实体的集合和存储库

假设我有

public class Product: Entity
{
   public IList<Item> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

假设我想找到一个带有最大值的项...我可以添加方法Product.GetMaxItemSmth()并使用Linq(from i in Items select i.smth).Max())或手动循环或其他任何方法.现在,问题是这会将完整的集合加载到内存中.

正确的解决方案是执行特定的数据库查询,但域实体无法访问存储库,对吧?所以我要么

productRepository.GetMaxItemSmth(product)
Run Code Online (Sandbox Code Playgroud)

(这很丑陋,没有?),或者即使实体有权访问存储库,我也使用IProductRepository实体

product.GetMaxItemSmth() { return Service.GetRepository<IProductRepository>().GetMaxItemSmth(); }
Run Code Online (Sandbox Code Playgroud)

这也是丑陋的,是代码的重复.我甚至可以去看看并进行扩展

public static IList<Item> GetMaxItemSmth(this Product product)
{
   return Service.GetRepository<IProductRepository>().GetMaxItemSmth();
}
Run Code Online (Sandbox Code Playgroud)

哪个更好只是因为它并没有真正使存储库中的实体混乱......但仍然是方法重复.

现在,这是是否使用product.GetMaxItemSmth()productRepository.GetMaxItemSmth(product)再次使用的问题.我错过了DDD的东西吗?这里的正确方法是什么?刚用productRepository.GetMaxItemSmth(product)?这是每个人都使用和满意的吗?

我只是感觉不对...如果我无法Items从产品本身访问产品,为什么我需要这个系列呢Product?然后,Product如果它不能使用特定的查询并访问其集合而没有性能命中,可以做任何有用的事情吗?

当然,我可以使用效率较低的方式,而且从不介意,当它很慢时,我会将存储库调用作为优化注入实体......但即使这听起来也不对,是吗?

有一点要提一下,也许它不是DDD ......但我需要在Product中使用IList才能获得使用Fluent NHibernate生成的数据库模式.不过,请在纯DDD环境中自由回答.

更新:这里描述了一个非常有趣的选项:http://devlicio.us/blogs/billy_mccafferty/archive/2007/12/03/custom-collections-with-nhibernate-part-i-the-basics.aspx,不仅处理与DB相关的集合查询,也可以帮助进行集合访问控制.

c# domain-driven-design

13
推荐指数
2
解决办法
4359
查看次数