我希望这是一个非常简单的,虽然经过大量的谷歌搜索后,我无法解决这个问题.
我正在使用MVC 3在购物车网站上工作,并使用代码优先的实体框架.我发送的模型是Product对象列表,每个对象都包含以下属性:
[Required(ErrorMessage = "This is a required field.")]
[DataType(DataType.Currency)]
[Range(1.00, 500.00, ErrorMessage = "Products can not be free.")]
[DisplayFormat(DataFormatString = "{0:C}")]
[DisplayName("Price")]
public double Price { get; set; }
Run Code Online (Sandbox Code Playgroud)
我希望DisplayFormat属性会导致视图中的以下行将值格式化为货币(item是循环中的产品对象):
@Html.DisplayFor(modelItem => item.Price)
Run Code Online (Sandbox Code Playgroud)
但这根本不适用格式化.到目前为止,我能够让它工作的唯一方法是使用它:
@String.Format("{0:C}", item.Price)
Run Code Online (Sandbox Code Playgroud)
但如果可能的话,我宁愿使用@ Html.DisplayFor,因为它设计用于处理nulls之类的东西.我知道它会是0或更多.事实上,通过验证它总是有一定数量 - 但我想确保在我继续之前没有更正确的方法.
任何有关这方面的信息将非常感谢!
UPDATE
达林回答并指出它确实有效,这让我回到了实际上发送给视图的地方.我意识到虽然我有一个名为ProductModel的类,它具有DisplayFormat属性,但我实际上正在返回另一个包含产品列表的模型.这叫做ProductListModel,我意识到它返回了Product数据类的列表 - 而不是ProductModel类!
所以最后它实际上非常简单.只是希望我没有浪费半个晚上.感谢鼓励我回去检查一下,达林!
c# asp.net-mvc linq-to-entities entity-framework data-annotations
我单元测试的代码是指app.config文件中的appsetting.为了满足这个需求,我在我的单元测试项目中添加了一个app.config文件.如果单击"单元测试会话"窗口中的"运行所有测试"图标,我的所有测试都会通过.
我已将"ReSharper.ReSharper_UnitTest_RunSolution"命令映射到Ctrl + Shift + Alt + U. 如果我通过按下这个组合来运行测试,测试全部运行,但是他们找不到appsetting,它通过null返回.
我假设这意味着按钮单击在测试项目的上下文下运行,而命令没有,但我无法确定该命令正在做什么.
我是否映射了错误的命令?
编辑1:我也尝试使用键盘快捷键Alt-RUN(ReSharper的>单元测试>运行所有),以及手动点击菜单,发现这也导致所有单元测试不是找到appsetting,因此失败.单击"单元测试会话"中的"运行所有测试"图标(双绿色箭头)继续正常工作.
编辑2:我意识到我应该嘲笑一个单独的类,无论如何从配置文件中获取appsettings,所以这就是我现在正在做的事情.所以现在单元测试时没有依赖配置文件.
我们最近发布了最新版本的Intranet应用程序,它现在使用Windows身份验证作为标准,并且需要能够使用最终用户的域凭据连接到已配置的SQL服务器.
最近我们发现,在几个客户部署中,尽管IIS可以看到用户的域凭据,但它不会将这些凭据传递给SQL服务器.相反,它似乎使用匿名帐户.这是尽管遵循所有正确的步骤(将目录安全性更改为Win Auth,更新Web.Config以使用Win Auth并拒绝匿名用户).
我一直在做大量阅读,这表明我们需要确保Kerberos到位,但我不确定(a)这是多么有效(即它真的是一个要求吗?)或(b)如何去调查它是否已经设置或如何进行设置.
我们的情况是,我们需要能够配置IIS或应用程序为客户工作,或者向客户说明他们需要做些什么才能使其正常工作.
我们已经设法在我们的内部网络上使用测试SQL服务器和开发人员的IIS框重现这一点,所以我们将搞乱这个设置,看看我们是否可以提出解决方案,但是如果有人有任何解决方案聪明的想法,我很高兴听到他们!
我特别想听听人们对Kerberos的看法或建议.这是一项要求,如果是,我该如何向客户概述应该如何配置?
哦,我也看到有几个人提到域名的'经典单跳规则'和传递Windows凭据,但我不知道这实际上有多少重量?
谢谢!
马特
我发布这个更多是因为我想了解更多,因为我的解决方法基本上是避免使用LINQ to Entities!如果我可以使用它会很好.所以,如果有人可以开导我..
我正在使用代码优先实体框架作为我的数据模型开发ASP.Net MVC 3应用程序(我的第一个).它将成为一个在线商店,我正在使用'Admin'控制器,作为管理员,您将能够编辑产品等.在添加新产品时,您必须指定一个类别,这意味着下拉列表类别.
我开始时只根据我在这里找到的信息返回ViewBag中的IEnumerable类别集合.这似乎是处理事情的一种非常好的方式.
但我得到了同样的错误,你会在下面看到.因此,根据我在线阅读的建议,我创建了一个专门用于创建新产品和编辑现有产品的独立模型.Categories集合用于在视图中构建下拉列表.
public class ProductModel
{
public int Id { get; set; }
public int CategoryId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public double Price { get; set; }
public bool IsVisible { get; set; }
public IEnumerable<SelectListItem> Categories
{
get
{
return new DataAccess()
.Categories
.OrderBy(c => c.Description)
.Select(c => new SelectListItem
{
Value = c.Id.ToString(),
Text = c.Description …
Run Code Online (Sandbox Code Playgroud) c# linq-to-entities entity-framework-4.1 asp.net-mvc-3 drop-down-menu
我有一个带有以下签名的方法,我想要存根:
async Task<T> MyMethod<T>(SomeClass, bool, string, string, string, params object[])
Run Code Online (Sandbox Code Playgroud)
泛型类型T是我们期望方法返回的类型(从服务器返回的数据被强制转换为类型T).请注意,无法从传入的参数中推断出它; 它必须每次都指定.
我需要在Rhino Mocks中为这个方法创建一个存根,但它希望我提供泛型类型.我希望它适合任何类型的电话.我尝试使用<object>
,但它希望使用该特定类型进行调用.
我可以看出为什么这会是一个问题,因为对泛型类型的调用是在编译时处理的,而不是在运行时处理的.
但是,我觉得值得一提,以防万一我错过了一招.
编辑1
我应该已经包含了,现在我已经实现了一个解决方法,我将我的存根构建器包装在一个辅助方法中,这个方法本身就是一个通用的方法.
但问题是,我必须指定类型,然后才能满足该类型.被测系统可能会对我正在存根的方法进行多次调用,我需要一个适合所有类型的"全部捕获".
编辑2
我改进的解决方法是根本不使用Rhino Mocks.相反,我正在使用一个实现接口的模拟类.这样可以轻松实现泛型方法并返回默认值(或在构造期间设置的默认值).我仍然想知道在Rhino Mocks中是否有可能!
我们目前有一个内部WPF应用程序,可以为不同部门以不同方式为业务提供服务。我们有一个分阶段的推出过程,它通过以下步骤进行更改:
开发人员需要能够运行该应用程序的所有这些版本,并且某些用户访问Beta版本以注销新功能。
当前,这是通过通过ClickOnce部署的Launcher应用程序完成的,该应用程序下载并运行所选版本的客户端二进制文件。该应用程序的每个版本均由相应服务器上的相应Web服务托管(Alpha,Beta,Live)。
有谁知道如何通过UWP做到这一点?我们希望对应用程序进行过时的验证,并考虑对Surface,Windows Phone等的支持。但是在所有情况下,开发人员和用户都应该能够访问应用程序的不同版本,有时甚至可以同时运行它们。
是否支持这种并发部署同一UWP应用程序的多个版本?
我已经构建了一个 Google Maps API 工具集,它允许用户在地图上绘制形状,给它们命名并记录区域。完成每个形状后,系统会提示他们为其命名并设置一些其他选项,例如是否在地图上显示标签。
我想为用户提供在放置点时右键单击并取消折线(或多边形)的选项,即在绘制点时。
根据我在文档中阅读的内容,我应该能够检测到用户右键单击了地图,但我不确定如何取消他们正在绘制的叠加层,因为它不会被提交地图,这意味着我将无法将其称为对象。
有任何想法吗?
解决方案
感谢 Molle 博士的解决方案,内容如下:
...
google.maps.event.addListener(_map, "rightclick", function(){
InitialiseDrawingManager();
});
}
function InitialiseDrawingManager(){
if (_drawingManager != null)
_drawingManager.setMap(null);
_drawingManager = new google.maps.drawing.DrawingManager();
_drawingManager.setMap(_map);
UpdateOverlaySettings();
...
Run Code Online (Sandbox Code Playgroud) 希望其他人遇到过此问题,因为Google只返回9个错误结果!有关SqlPackage的信息似乎还有点不足.
我们目前正在进行迁移到持续部署环境的过程.作为其中一部分,我们使用数据库项目来存储数据库模式,构建服务器使用SqlPackage.exe通过比较每个项目的.dacpac文件与服务器上托管的关联模式模板数据库来生成升级脚本.
到目前为止,我们有六个数据库(还有更多),除了一个之外它们都工作正常,当SqlPackage为'target'数据库建模时会抛出以下错误:
错误SQL72018:无法导入触发器,但源中存在一个或多个这些对象.
我们唯一能想到的是目标数据库的大小问题; 也许SqlPackage内存不足?它是我们拥有的最大的数据库模式,所以它当然是可行的.如果它是SqlPackage的内存限制,我们如何增加它?
我们将开始从目标数据库和源项目中删除对象,以查看我们是否可以确定它是否符合规模或特定架构对象,但同时我们将非常感谢任何想法和建议!
更新
我刚刚尝试从目标数据库中删除所有触发器,现在它将没有错误地吐出升级脚本.接下来我将尝试仅删除其中的一半,看看我是否可以将其缩小到一个特定的触发器.我怀疑它可能只是模式的大小,这可以追溯到SqlPackage内存问题.
c# ×4
unit-testing ×2
asp.net ×1
asp.net-mvc ×1
clickonce ×1
database ×1
delegation ×1
google-maps ×1
javascript ×1
kerberos ×1
resharper ×1
rhino-mocks ×1
sql-server ×1
tdd ×1
uwp ×1
wpf ×1