我的应用程序发生了一些非常奇怪的事情:
我的ViewModel中有以下属性:
public int? StakeholderId { get; set; }
Run Code Online (Sandbox Code Playgroud)
它在部分视图中呈现如下:
<%= Html.Hidden("StakeholderId", Model.StakeholderId) %>
Run Code Online (Sandbox Code Playgroud)
提交表单,相关控制器操作生成id并更新模型,然后返回具有更新模型的相同视图
我遇到的问题是隐藏字段第二次呈现的"值"属性中没有任何内容,即使StakeholderId现在有值.
如果我只是自己输出值,它会显示在页面上,所以我通过这样做来渲染值:
<input type="hidden" id="StakeholderId" name="stakeholderId" value="<%: Model.StakeholderId %>" />
Run Code Online (Sandbox Code Playgroud)
但是帮助者没有获得更新的值这很奇怪?
(我正在使用jQuery提交表单并将动作结果呈现为div,但是我已经检查过了,我回来的html已经错了,之后jQuery对它做了什么,所以我认为这与任何东西)
UPDATE
我发现在控制器操作返回局部视图之前,我还可以清除相关的ModelState键.
有人可以请我澄清一些事情.在我的ASP.NET MVC 2应用程序中,我有一个BaseViewModel包含以下方法的类:
public virtual IDictionary<string, object> GetHtmlAttributes<TModel, TProperty>
(Expression<Func<TModel, TProperty>> propertyExpression)
{
return new Dictionary<string, object>();
}
Run Code Online (Sandbox Code Playgroud)
我们的想法是每个子视图模型都可以覆盖此方法,并根据某些逻辑提供一组合适的html属性,以便在视图中呈现:
<%: Html.TextBoxFor(model => model.MyProperty, Model.GetHtmlAttributes
(model => model.MyProperty)) %>
Run Code Online (Sandbox Code Playgroud)
但是当在上面的行中使用时,当我点击视图时出现编译错误:
方法'
...BaseViewModel.GetHtmlAttributes<TModel,TProperty> Expression<System.Func<TModel,TProperty>)' 的类型参数不能从用法中推断出来.尝试显式指定类型参数.
我必须做以下事情:
<%: Html.TextBoxFor(model => model.MyProperty, Model.GetHtmlAttributes
<ChildModel, string>(model => model.MyProperty)) %>
Run Code Online (Sandbox Code Playgroud)
我只是在寻找一些关于它如何尝试推断类型的清晰度,在HtmlHelper/TextBoxFor扩展方法中这样做是没有问题的?
是因为HtmlHelper在视图中将自动ViewUserControl与页面顶部指定的类型相同,而我的代码可以用于继承的任何类型BaseViewModel?有可能以这样的方式编写它,它可以推断我的模型/属性类型?
有没有办法在Visual Studio(2008+)中折叠当前文件中的所有文档标题(///注释)?
我有一个泛型方法,它将字符串中的id(例如,从ASP.NET表单上的HiddenField的值中检索到)转换为目标类型并对其执行某些操作.
private void MyMethod<T>(string rawId, Action<T> doSomethingWithId)
{
T id = (T)Convert.ChangeType(rawId, typeof(T));
doSomethingWithId(id);
}
Run Code Online (Sandbox Code Playgroud)
T将是Guid或Int32,并且当它是Guid时,上面的代码会在(在运行时)结束,说从String到Guid的转换是无效的.
然后我想我可能会尝试检查类型,如果Guid,实例化一个新的Guid:
var id = default(T);
if (id is Guid)
id = new Guid(rawId);
else
id = (T)Convert.ChangeType(rawId, typeof(T));
Run Code Online (Sandbox Code Playgroud)
现在这给出了一个错误(在编译时),Guid无法转换为类型T.
不太确定如何解决这个问题.有什么建议?
我有以下标记:
<div id="accordion" class="leftaligned">
<div>
<h3><a href="#">Stakeholder</a></h3>
<div>Content</div>
</div>
<div>
<h3><a href="#">Relationships</a></h3>
<div>Blah blah</div>
</div>
<div>
<h3><a href="#">Address</a></h3>
<div>Yada yada</div>
</div>
<div>
<h3><a href="#">Contact Details</a></h3>
<div>Foo bar</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我创建了一个如下手风琴:
$("#accordion").accordion({
header: "h3",
fillSpace: true,
changestart: function(event, ui) {
if (someConditionIsTrue()) {
event.stopPropagation();
event.preventDefault();
return (false);
}
}
});
Run Code Online (Sandbox Code Playgroud)
这个想法是有一些用例会阻止用户更改窗格,但是上面取消事件没有任何效果,窗格仍然可以更改.
有没有办法防止窗格的变化?我还尝试以编程方式激活当前窗格以防止更改,但是会触发另一个changestart事件并且所有地狱都会松动(手风琴实际上会中断)
我有一个silverlight(v2)数据网格,其中一些项目是节标题,因此必须以不同的背景颜色显示.
我正在尝试使用以下xaml执行此操作:
<dg:DataGrid.RowStyle>
<Style TargetType="dg:DataGridRow">
<Setter Property="Background" Value="{Binding Path=Background, Mode=OneTime}" />
</Style>
</dg:DataGrid.RowStyle>
Run Code Online (Sandbox Code Playgroud)
我希望它将datagrid行viewmodel的Background属性绑定到每一行的Background属性,而不是我得到一个可爱的未知xaml解析错误:
{System.Windows.Markup.XamlParseException: AG_E_RUNTIME_MANAGED_UNKNOWN_ERROR [Line: 16 Position: 57]
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
at Etana.Survey.Silverlight.UserInterface.Views.MaximumProbableLossPage.InitializeComponent()
at Etana.Survey.Silverlight.UserInterface.Views.MaximumProbableLossPage..ctor()}
Run Code Online (Sandbox Code Playgroud)
如果我尝试明确指定"红色"并且不尝试绑定样式,那么它可以工作,所以我想知道银光是否允许我绑定这样的样式或者是否有其他技巧.
(xaml是基于这个的wpf实现工作正常)
任何输入将非常感激
当我有一个Model或ViewModel,其值从控制器发送到View但是以这样的方式呈现,即在发布表单时它们不会被提交回控制器,(例如,一个标签的内容是从数据加载的source)使这些值可用于处理POST请求的控制器操作的首选方法是什么?
我正忙着编写一个声明提供程序类,用于安全令牌服务.
从SQL Server 2008 R2数据库读取用户权限:
SELECT A, B, C, ..., X FROM Permissions WHERE UserId = @UserId
Run Code Online (Sandbox Code Playgroud)
会给我一行,例如:
A B C ... X
1 0 1 1
Run Code Online (Sandbox Code Playgroud)
在表单中包含这些数据要容易得多
Permission Value
A 1
B 0
C 1
...
X 1
Run Code Online (Sandbox Code Playgroud)
由于实际表包含几十列,我宁愿能够"动态"进行转置,而无需手动输入任何列名.
感觉像PIVOT/UNPIVOT函数和INFORMATION_SCHEMA.COLUMNS视图是我需要的,但我不知道该怎么做.
查询的任何想法会这样做?
PS.我想如果push推进,我只是将结果集粘贴在DataTable中并迭代代码中的列以生成用户声明,但我想知道上述方法是否可行首先:)
c# ×5
.net ×3
asp.net-mvc ×2
generics ×2
asp.net ×1
casting ×1
expression ×1
html-helper ×1
jquery ×1
jquery-ui ×1
linq ×1
silverlight ×1
sql ×1
sql-server ×1
unpivot ×1
xaml ×1