小编Vel*_*rev的帖子

ASP.NET MVC:使用HtmlHelper.Hidden不会呈现隐藏字段值

我的应用程序发生了一些非常奇怪的事情:

我的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键.

.net c# asp.net-mvc html-helper

71
推荐指数
2
解决办法
7万
查看次数

无法从用法推断出类型参数.尝试显式指定类型参数

有人可以请我澄清一些事情.在我的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?有可能以这样的方式编写它,它可以推断我的模型/属性类型?

c# linq generics expression asp.net-mvc-2

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

折叠Visual Studio中所有文档标题/注释的快捷方式

有没有办法在Visual Studio(2008+)中折叠当前文件中的所有文档标题(///注释)?

.net keyboard-shortcuts visual-studio

14
推荐指数
2
解决办法
6790
查看次数

将值从字符串转换为Guid或int的泛型类型

我有一个泛型方法,它将字符串中的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.

不太确定如何解决这个问题.有什么建议?

c# asp.net generics casting

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

jQuery accordion:阻止窗格打开/取消changestart事件

我有以下标记:

<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事件并且所有地狱都会松动(手风琴实际上会中断)

jquery jquery-ui javascript-events

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

silverlight datagrid - 绑定每一行的样式

我有一个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实现工作正常)

任何输入将非常感激

c# silverlight xaml

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

保留ASP.NET MVC中未提交的模型值的方法?

当我有一个Model或ViewModel,其值从控制器发送到View但是以这样的方式呈现,即在发布表单时它们不会被提交回控制器,(例如,一个标签的内容是从数据加载的source)使这些值可用于处理POST请求的控制器操作的首选方法是什么?

  1. 我应该为我想要的所有内容添加隐藏字段吗?
  2. 从数据源重新加载我需要的数据?(哎呀!)
  3. 使用会话变量?
  4. 还有其他一些我不知道的伎俩吗?

.net c# asp.net-mvc

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

SQL:将一行转换为一列(并在新列中包含列名)

我正忙着编写一个声明提供程序类,用于安全令牌服务.

从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中并迭代代码中的列以生成用户声明,但我想知道上述方法是否可行首先:)

sql sql-server unpivot sql-server-2008-r2

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