问题列表 - 第37595页

MVC2 - 如何在模板中获取父模型(容器)

我正在使用DataAnnotations编写MVC2应用程序.我有以下型号:

public class FooModel 
{
    [ScaffoldColumn("false")]
    public long FooId { get; set; }

    [UIHint("BarTemplate")]
    public DateTime? Bar { get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我想为Bar创建一个自定义显示模板.我创建了以下模板:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime?>" %>

<div class="display-label">
    <span><%: Html.LabelForModel() %></span>
</div>
<div class="display-field">
    <span><%: Html.DisplayForModel()%></span>
    <%: Html.ActionLink("Some link", "Action", new { id = ??FooId?? }) %>
</div>
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是Bar的内部模板我想从我的模型访问另一个属性.我不想为FooModel创建单独的模板,因为我将不得不对所有其他FooModel属性进行硬编码.

在使用调试器进行简短调查后,我可以看到:

  1. this.ViewData.ModelMetadata.ContainerTypeFooModel(正如预期的那样)
  2. this.ViewData.TemplateInfo有一个非公共属性VisitedObjects (类型 System.Collections.Generic.HashSet<object>),包含两个元素: FooModelDateTime?.

如何访问我的FooModel?我不想破解我使用Reflection的方法.

更新:

我已经接受了mootinator的回答,因为它认为我是允许类型安全的最佳解决方案.我也赞成了Tx3的答案,因为mootinator的答案建立在它之上.尽管如此,我认为在这种场景中应该有更好的MVC支持,我认为这在现实世界中非常普遍,但在示例应用程序中却缺少.

templates model modelmetadata asp.net-mvc-3 asp.net-mvc-2

6
推荐指数
1
解决办法
2291
查看次数

在零售手机上开发应用程序

我可以使用零售手机测试我正在为wp7开发的应用吗?

windows-phone-7

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

C#WinForms禁用DPI缩放

我有一个WinForm应用程序,它承载了许多图像.当我将应用程序放在DPI为120的Win7机器上时,它完全破坏了表单的外观.有没有办法禁用我的表单缩放?

我知道这是不建议的事情,DPI应该是无缝的并由操作系统处理.但是当谈到皮肤应用程序时,图像不能很好地扩展.我没有为所有DPI变体创建图像的奢侈,所以请不要建议作为答案.

c# dpi scale winforms

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

PowerShell ForEach/Piping混乱

我在PowerShell中使用TFS PowerTools Cmdlet尝试从我的服务器获取有关Changeset和相关WorkItem的一些信息.我把问题归结为我不理解的行为,我希望它不是TFS特定的(所以有人可能能够向我解释这个问题:))

这是我可以开始工作的唯一命令:

Get-TfsItemHistory C:\myDir -recurse -stopafter 5 | % { Write-Host $_.WorkItems[0]["Title"] }

它做了我所期望的 - Get-TfsItemHistory返回一个包含5个ChangeSet的列表,并将它们传递给foreach,它打印出第一个关联WorkItem的Title.那我的问题是什么?我正在尝试编写一个大型脚本,我更喜欢将事物编写为更像C#程序(powershell语法让我哭泣).每当我尝试以任何其他方式执行上述操作时,WorkItems集合为空.

以下命令(我解释为在逻辑上等效)不起作用(WorkItems集合为null):

$items = Get-TfsItemHistory C:\myDir -recurse -stopafter 5
$items | ForEach-Object { Write-Host $_.WorkItems[0]["Title"] }

我真的更喜欢的那个:

$items = Get-TfsItemHistory C:\myDir -recurse -stopafter 5
foreach ($item in $items)
{
    $item.WorkItems[0]["Title"]
    # do lots of other stuff
}

我读了一篇关于'foreach'运算符和ForEach-Object Cmdlet之间差异的文章,但这似乎更像是一场性能争论.这似乎是关于何时使用管道的问题.

我不确定为什么这三种方法都不起作用.任何见解都表示赞赏.

powershell foreach piping tfs2010

11
推荐指数
1
解决办法
2万
查看次数

java socket writeUTF()和readUTF()

我一直在阅读一些Java套接字代码片段,并且说明了在套接字通信中,为了按顺序发送消息,您不必手动分离它们,编写器/阅读器流会自动为您做事.这是一个例子:

writer.java
writeUTF("Hello");
writeUTF("World");


reader.java
String a=readUTF(); // a=Hello
String a=readUTF(); // b=World
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这段代码片段并且工作正常.但是,我想知道这种编码风格是否应该正常工作.是否存在按顺序使用套接字流而不明确分隔每个分段的潜在风险?

java sockets

11
推荐指数
2
解决办法
5万
查看次数

为什么不能在C++中使用一个新调用分配多维数组?

在C++中,您可以轻松地分配一维数组,如下所示:

T *array=new T[N];
Run Code Online (Sandbox Code Playgroud)

你也可以用一个语句删除它:

delete[] array;
Run Code Online (Sandbox Code Playgroud)

编译器将知道如何解除分配正确的字节数的魔力.

但为什么不能像这样分配二维数组呢?

T *array=new T[N,M];
Run Code Online (Sandbox Code Playgroud)

或者甚至喜欢这个?

T *array=new T[N,M,L];
Run Code Online (Sandbox Code Playgroud)

如果你想要一个多维度,你必须这样做:

T **array=new T*[N];
for(int i=0;i<N;i++) array[i]=new T[M];
Run Code Online (Sandbox Code Playgroud)

如果你想要一个使用矩阵的快速程序(矩阵运算,特征值算法等等),你可能也希望利用缓存来获得最佳性能,这需要数据在同一个地方.使用vector<vector<T> >是相同的情况.在C中,您可以在堆栈上使用可变长度数组,但是您无法在堆上分配它们(并且堆栈空间非常有限),您也可以在C++中执行可变长度数组,但它们不会出现在C中++ 0x中.

唯一的解决方法是相当hackish和错误 - 错误:

T *array=new T[N*M];
for(int i=0;i<N;i++)
   for(int j=0;j<M;j++)
   {
       T[i*N+j]=...;
   }
Run Code Online (Sandbox Code Playgroud)

c++ standards

5
推荐指数
1
解决办法
1153
查看次数

Windows上的Fat Binary?

我知道在Mac OS X上,您可以使用lipo将针对不同体系结构的多个二进制文件组合成一个二进制文件.我想知道Windows方面是否有类似的解决方案.谢谢.

windows binary macos dll

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

如何更改eclipse中行号列的背景颜色?

我正在使用Eclipse 3.6.1 classic并尝试根据自己的需要调整颜色语法.我无法改变的一件事是行号列的背景颜色.如果这是不可能的,因为Eclipse没有它的选项,即使你有任何人知道任何黑客/插件,我也会满意.

谢谢.

eclipse ide eclipse-plugin eclipse-3.6

10
推荐指数
1
解决办法
6755
查看次数

Java:得到最大的公约数

我已经看到这样的功能存在BigInteger,即BigInteger#gcd.Java中是否还有其他函数适用于其他类型(int,longInteger)?这似乎是有意义的java.lang.Math.gcd(有各种各样的重载),但它不存在.它在别的地方吗?


(请不要将此问题与"我如何自己实施"这一问题混淆,请!)

java greatest-common-divisor

78
推荐指数
8
解决办法
19万
查看次数

如何交叉多组?

我有这个清单:

private List<Set<Address>> scanList;
Run Code Online (Sandbox Code Playgroud)

所以我的列表包含多个扫描,如您所见.每次扫描后,我都会在列表中添加新集.

完成所有扫描后,我只想获取每组中出现的地址并将其放入:

private List<Address> addresses;
Run Code Online (Sandbox Code Playgroud)

Set/TreeSet/HashSet中是否存在类似的内容?

编辑:在答案之后,retainAll()是正确的方法.谢谢.这是来源:

Set<Address> addressCross = scanList.get(0);
for (int i = 1; i < scanList.size(); i++) {
    addressCross.retainAll(scanList.get(i));
}   
for (Address address : addressCross) {
    addresses.add(address);
}
Run Code Online (Sandbox Code Playgroud)

java intersection set

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