假设我有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模型; …
大多数浏览器缓存形成输入值.因此,当用户刷新页面时,输入具有相同的值.
这是我的问题.当用户单击"保存"时,服务器将验证POSTed数据(例如,已检查的产品),如果无效,则将其发送回浏览器.但是,如上所述,即使服务器清除某些值的选择,由于浏览器缓存,它们仍可能被选中!我的数据不可见(直到选中父项)复选框,因此用户可能甚至不知道仍然选择了某些先前的值,直到再次单击"保存"并收到错误消息 - 即使用户认为不是.哪个很烦人.
这可以通过Ctrl-F5解决,但它甚至不是解决方案.是否有一种自动/编程方式告诉浏览器不要在某个表单/页面上缓存表单输入数据?
我的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全功率,为什么我需要另一个抽象.
有没有办法将lambda的字符串表示转换为lambda Func?
Func<Product, bool> func = Parse<Product, bool>("product => product.Name.Length > 0");
Run Code Online (Sandbox Code Playgroud)
我尝试了动态LINQ但它没有按预期工作 - 例如它不期望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#对象上的事务?喜欢
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.注意我没说它应该用于生产;-)
我想找出什么代码导致gcc编译时间慢.我以前有一个代码正在缓慢编译,有人告诉我命令行开关,使gcc打印它编译的每一步,包括每个函数/变量/符号等.这有很大的帮助(我可以在控制台中看到gcc chokes),但我忘记了什么是转换.
在一个大型项目中,我们有很多类(数千个),并且对于每个类,使用typedef定义了一个特殊的智能指针类型.此智能指针类型是模板类.当我用"gcc -Q"编译时,我发现花了很多时间为每个类编译这些智能指针.这就是我看到smartptr<class1>::methods, then smartptr<class2>::methods... smartptr<class2000>::methods在gcc处理它们时在屏幕上滚动.
有加速这个过程的技巧吗?从smartptr的角度来看,这些类都是相同的,没有enable_if技巧等.
我现在正在尝试的事情:
但以上所有都不是一个完整的解决方案.我想知道是否有另一种方法可以优化编译时间,这是一个让gcc知道的技巧,例如,一旦它在看到其他特化时反复应用相同的知识就解析了smartptr,因为生成代码是相同的.
是的,我知道这是不是很一样,当然......但是,这只是一个疯狂的想法.
或者也许还有其他我不知道的技巧,可以加快编译速度.(只是为了说明我正在谈论的内容,我们可以通过消除其静态成员数据实例来优化另一个模板,这大大减少了编译时间.这根本不明显.)
从gcc 4.5移到gcc 4.6,现在它不链接到编译时未使用的库(即,如果没有从它们导入符号).
但是,这些库的目的是它们执行静态构造函数,从而使它们在运行时可用于应用程序(注册它们的符号).
有没有办法强制gcc链接到通过-l列出的所有库?
我想运行一个解析整个源代码树的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) 假设我有
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相关的集合查询,也可以帮助进行集合访问控制.