当我开始使用xVal进行客户端验证时,我只实现了使用域模型对象作为viewmodel或viewmodel中这些对象的嵌入实例的操作方法.
这种方法在大多数情况下都能正常工作,但有时候视图需要显示和回发模型属性的一个子集(例如,当用户想要更新他的密码,而不是他的其他配置文件数据时) .
一个(丑陋的)解决方法是在表单上为每个属性设置一个隐藏的输入字段,该字段在表单上不存在.
显然,此处的最佳做法是创建一个自定义视图模型,该视图模型仅包含与视图相关的属性,并通过Automapper填充视图模型.它更清晰,因为我只传输与视图相关的数据,但它远非完美,因为我必须重复已经存在于域模型对象上的相同验证属性.
理想情况下,我想通过MetaData属性将域模型对象指定为元类(这通常也称为"伙伴类"),但这不起作用,因为当元数据类具有属性时,xVal会抛出视图模型中不存在.
这有什么优雅的解决方法吗?我一直在考虑攻击xVal源代码,但也许还有其他方法我到目前为止忽略了.
谢谢,
阿德里安
编辑:随着ASP.NET MVC 2的到来,这不仅仅是与验证属性相关的问题,而且它也适用于编辑器和显示属性.
实体框架代码优先是开发新项目的一个很好的框架.但是扩展现有数据库呢?
例如,如果我只想在现有数据实体中添加其他属性,该怎么办?有没有"代码优先"的方法来实现这一点,还是我必须使用SQL Server Management Studio或类似工具手动添加数据库列?
到目前为止,我发现的是如何在架构更改时从头开始重新生成整个数据库,但我不想丢失我的数据.
如果我没弄错的话,Ruby on Rails有一个工具可以生成反映新数据库更改的SQL脚本.有没有办法在EF Code First中执行此操作?
entity-framework database-schema ef-code-first entity-framework-4.1
我需要在自定义属性中找到应用自定义属性的属性的类型.
例如:
[MyAttribute]
string MyProperty{get;set;}
Run Code Online (Sandbox Code Playgroud)
给定MyAttribute的实例,我怎样才能获得MyProperty的Type描述符?
换句话说,我正在寻找System.Type.GetCustomAttributes()的反面
我目前正在实施Monotouch应用程序,最终将移植到Monodroid.该应用程序只是OData Web服务的客户端.没有什么太花哨或性能至关重要.
挑战是尽可能多地重用代码.我知道Monotouch和Monodroid的UI API完全不同,但我希望重用数据数据抽象和业务层.
由于我的UI层遵循MVP模式,我还希望通过编写每个视图的抽象表示来重用UI控制器.但是,我只能猜测这是否有效,因为我还没有被允许进入Monodroid测试版.
现在我的问题:
您如何看待这种方法?这是一个好主意,还是会因为iPhone和Android之间的UI概念不同而导致平庸的应用程序?
您能否提供有关如何构建应用程序以最大化代码重用的任何提示?
谢谢,
阿德里安
我已经成功编译了我的WinRT版本的SQLite for x86,正如Tim Heuer所描述的那样.
但是,我仍在努力如何在ARM CPU上编译WinRT的dll.我使用Visual Studio ARM命令提示符运行nmake,但这只是给我以下错误:
C:\sqlite>nmake -f makefile.msc sqlite3.dll FOR_WINRT=1 OPTS=/DWINAPI_FAMILY=WIN
API_PARTITION_APP
Microsoft (R) Program Maintenance Utility Version 11.00.50522.1
Copyright (C) Microsoft Corporation. All rights reserved.
cl.exe -W3 -DNDEBUG -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS
-O2 -Zi /DEBUG -Femkkeywordhash.exe -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_RTR
EE=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_MAX_TRIGGER_DEPTH=100 /DWINAPI_F
AMILY=WINAPI_PARTITION_APP .\tool\mkkeywordhash.c
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.50522.1 for ARM
Copyright (C) Microsoft Corporation. All rights reserved.
mkkeywordhash.c
Microsoft (R) Incremental Linker Version 11.00.50522.1
Copyright (C) Microsoft Corporation. All rights reserved.
/machine:arm
/debug …Run Code Online (Sandbox Code Playgroud) 我开发了一个不支持纵向模式的XAML/C#Windows 8应用程序.我在Visual Studio中打开了Package.appxmanifest,并在"支持的旋转"下禁用了纵向和纵向翻转模式.这创建了以下旋转首选项:
<InitialRotationPreference>
<Rotation Preference="landscape" />
<Rotation Preference="landscapeFlipped" />
</InitialRotationPreference>
Run Code Online (Sandbox Code Playgroud)
但是,当我在模拟器中启动我的应用程序并旋转模拟器时,应用程序仍然会旋转到纵向模式.我怎么能防止这种情况发生?
谢谢,
阿德里安
默认情况下,Html.ValidationSummary()生成如下HTML:
<span class="validation-summary-errors">There were some errors...</span>
<ul class="validation-summary-errors">
<li>First Name too long</li>
<li>Invalid Email Address</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我想选择整个验证摘要并通过CSS在它周围添加一个边界框,所以我要添加一个这样的CSS类:
.validation-summary-errors{
background-color:#D9FFB2;
border: 1px solid #5CBA30;
color:#000000;
margin-top:15px;
margin-bottom:15px;
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,这会在验证摘要消息和每条错误消息周围绘制单独的框.当然不是我的想法.
我可以像这样在摘要周围添加一个div,但如果没有验证错误,这将导致一个空的红色框,所以这不是这样的:
<div class="my-validation-summary">
<h2>
<%=Model.Message%>
</h2>
<%= Html.ValidationSummary("There were some errors...")%>
</div>
Run Code Online (Sandbox Code Playgroud)
我可以想到几种方法来解决这个问题:
但是,所有这些对于解决这样一个简单的任务来说都很尴尬.必须有更好的方法来做到这一点.也许还有其他一些编写CSS类的方法,所以当没有验证摘要时我没有得到一个空盒子?
编辑:只是为了澄清,我正在调用这样的html帮助:
<%=Html.ValidationSummary("There were some errors...") %>
Run Code Online (Sandbox Code Playgroud)
编辑2:这个问题的范围是看我是否忽略了一些容易且明显的东西.好像我没有,所以我只是添加我自己的HtmlHelper功能,以满足我的需求.我投票支持我自己的问题.
我是IPhone开发的新手,必须决定开发我的应用程序的合适工具.因为我知道C#/ .NET,但不是客观C,Mono Touch似乎对我很有吸引力.但值得多花400美元吗?
如果两者都试过,我会对你的意见感兴趣.
我正在将现有的应用程序从Linq移植到SQL到Entity Framework 4(默认代码生成).
我注意到两者之间的一个区别是重置对象引用时不会更新外键属性.现在我需要决定如何处理这个问题.
例如,假设您有两个实体类型,Company和Employee.一家公司有很多员工.
在Linq To SQL中,设置公司还设置公司ID:
var company=new Company(ID=1);
var employee=new Employee();
Debug.Assert(employee.CompanyID==0);
employee.Company=company;
Debug.Assert(employee.CompanyID==1); //Works fine!
Run Code Online (Sandbox Code Playgroud)
在实体框架中(并且不使用任何代码模板自定义),这不起作用:
var company=new Company(ID=1);
var employee=new Employee();
Debug.Assert(employee.CompanyID==0);
employee.Company=company;
Debug.Assert(employee.CompanyID==1); //Throws, since CompanyID was not updated!
Run Code Online (Sandbox Code Playgroud)
如何使EF的行为与LinqToSQL相同?我看了默认代码生成T4模板,但我无法弄清楚如何进行必要的更改.看起来像一个单行应该可以做到这一点,但我无法弄清楚如何获得给定引用的ID属性.
architecture ×2
asp.net-mvc ×2
c# ×2
validation ×2
windows-8 ×2
xamarin.ios ×2
arm ×1
attributes ×1
automapper ×1
css ×1
html-helper ×1
iphone ×1
jquery ×1
linq-to-sql ×1
makefile ×1
mvp ×1
orientation ×1
reflection ×1
sqlite ×1
xcode ×1
xval ×1