小编Dav*_*vid的帖子

控制器和动作的MVC属性

有没有办法在Controller级别添加属性,但不能在特定操作上添加.例如,如果我在我的控制器中有10个动作,那些动作中只有一个不需要我创建的特定属性.

[MyAttribute]
public class MyController : Controller
{
    public ActionResult Action1() {}
    public ActionResult Action2() {}

    [Remove_MyAttribute]
    public ActionResult Action3() {}
}

我可能会将此Action移动到另一个控制器(但不喜欢)或者我可以将MyAttribute应用于除Action3之外的所有操作,但只是想如果有更简单的方法?

c# asp.net-mvc

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

如何检测对象是否为类型泛型List并转换为所需类型?

我有一个扩展方法,用于将通用列表转换为字符串.

public static string ConvertToString<T>(this IList<T> list)
{
    StringBuilder sb = new StringBuilder();
    foreach (T item in list)
    {
        sb.Append(item.ToString());
    }
    return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)

我有一个对象,它是一个包含列表的对象类型; 这个名单可以是List<string>,List<int>,List<ComplexType>任何类型的列表.

有没有办法可以检测到这个对象是一个通用列表,因此转换为特定的通用列表类型来调用ConvertToString方法?

//ignore whats happening here
//just need to know its an object which is actually a list
object o = new List<int>() { 1, 2, 3, 4, 5 };

if (o is of type list)
{
    string value = (cast o to generic type).ConvertToString();
}
Run Code Online (Sandbox Code Playgroud)

c# generics casting

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

IEnumerable与IObservable的不同之处是什么?

我很好奇是否IEnumerableIObservable引擎盖下有什么不同.我分别理解了pull和push模式但是C#在内存等方面如何通知订阅者(对于IObservable)它应该在内存中接收下一位数据来处理?观察到的实例如何知道它有一个数据的变化推送到订阅者.

我的问题来自于我正在从文件中读取行的测试.该文件总共约为6Mb.

标准时间:4.7s,行:36587

Rx拍摄时间:0.68秒,行:36587

Rx如何能够大规模地改进文件中每条线的正常迭代?

private static void ReadStandardFile()
{
    var timer = Stopwatch.StartNew();
    var linesProcessed = 0;

    foreach (var l in ReadLines(new FileStream(_filePath, FileMode.Open)))
    {
        var s = l.Split(',');
        linesProcessed++;
    }

    timer.Stop();

    _log.DebugFormat("Standard Time Taken: {0}s, lines: {1}",
        timer.Elapsed.ToString(), linesProcessed);
}

private static void ReadRxFile()
{
    var timer = Stopwatch.StartNew();
    var linesProcessed = 0;

    var query = ReadLines(new FileStream(_filePath, FileMode.Open)).ToObservable();

    using (query.Subscribe((line) =>
    {
        var s = line.Split(',');
        linesProcessed++;
    }));

    timer.Stop();

    _log.DebugFormat("Rx Time Taken: {0}s, …
Run Code Online (Sandbox Code Playgroud)

c# ienumerator system.reactive

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

如何从对象列表创建MVC HtmlHelper表

我正在尝试创建一个特定的HtmlHelper表扩展来减少视图中的意大利面条代码.

获取域对象列表我想显示一个表,它在使用域对象的属性作为列时更加智能.另外,我想禁用一些属性作为列显示.一个想法是用属性来装饰属性,告诉它不被显示.

希望这是有道理的,但到目前为止我到达的地方......

public static string MyTable(this HtmlHelper helper, string name, 
    IList<MyObject> items, object tableAttributes)
{
    if (items == null || items.Count == 0)
        return String.Empty;

    StringBuilder sb = new StringBuilder();
    BuildTableHeader(sb, items[0].GetType());

    //TODO: to be implemented...
    //foreach (var i in items)
    //    BuildMyObjectTableRow(sb, i);

    TagBuilder builder = new TagBuilder("table");
    builder.MergeAttributes(new RouteValueDictionary(tableAttributes));
    builder.MergeAttribute("name", name);
    builder.InnerHtml = sb.ToString();

    return builder.ToString(TagRenderMode.Normal);
}

private static void BuildTableHeader(StringBuilder sb, Type p)
{
    sb.AppendLine("<tr>");

    //some how here determine if this property should be shown or …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc html-helper properties

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

如何用逗号分隔字符串,忽略双引号中的逗号

之前已经问过这个问题,但我一直试图在powershell中使用一个解决方案但是没有得到预期的结果.

$line = '1,2,"N",09/04/13,"P09042013ZSD(1,0)","ZSD"'
[string[]] $splitColumns = $line.Split('(,)(?=(?:[^"]|"[^"]*")*$)', [StringSplitOptions]'RemoveEmptyEntries')
Run Code Online (Sandbox Code Playgroud)

当我循环通过我期待的分裂值

1
2
"N"
09/04/13
"P09042013ZSD(1,0)"
"ZSD"
Run Code Online (Sandbox Code Playgroud)

但我得到了

1
2
N
09/04/13
P09042013ZSD
1
0
ZSD
Run Code Online (Sandbox Code Playgroud)

我使用带有ExplicitCapture设置的http://regexhero.net/tester/(Split)测试了正则表达式,并返回了所需的结果.

工作方案

$RegexOptions = [System.Text.RegularExpressions.RegexOptions]
$csvSplit = '(,)(?=(?:[^"]|"[^"]*")*$)'

$splitColumns = [regex]::Split("StringHere", $csvSplit, $RegexOptions::ExplicitCapture)
Run Code Online (Sandbox Code Playgroud)

regex powershell split

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

如何在mvc kendo网格的ajax绑定中使用客户端模板表达式?

我有一个两层分层网格,我从服务器端绑定到使用ajax.两个数据层的ajax读取工作正常但是我很难使用ClientTemplate基于条件逻辑来呈现我的列.

下面是服务器端绑定版本.我知道我必须使用ClientTemplate和表达式#=#才能产生相同的效果,但我遇到两个问题:

  1. 如何增加每行的变量'i',以便我可以使用CheckBoxFor和html帮助方法?
  2. 如何转换@以使用ClientTemplate表达式.请注意,条件逻辑使用视图模型的属性以及绑定元素(MyViewModel)的属性以及条件逻辑使用模型中的混合属性

将其转换为表达式将是最有帮助的.

var i = -1;

@(Html.Kendo().Grid<MyViewModel>()
  .Name("grid")
  .Columns(columns =>
  {
    columns.Bound(c => c.Selected).Title("")
      .Template(
        @<text>
          @{i++;}
          @if (Model.Permissions.HasInsertAccess && item.Status == Status.Created)
          {
            <input type="hidden" name="MyViewModels.Index" value="@i" />
            @Html.CheckBoxFor(m => m.MyViewModels[i].Selected)
          }
          </text>);

          columns.Bound(c => c.Id)
            .Template(@<text>@Html.HiddenFor(m => m.MyViewModels[i].Id)@item.Id</text>)
Run Code Online (Sandbox Code Playgroud)

c# telerik kendo-ui kendo-grid kendo-asp.net-mvc

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

如何定义基本的自定义配置部分?

我有自己的自定义配置部分,但想创建一个内部具有简单键/值的新元素.现在我有一个工作版本,但似乎有很多代码用于这么简单的任务.是否有改进的做事方式?

下面是我的配置和自定义配置类的剥离版本.

web.config中

<myRootNode>
    <myNode>
        <add key="a" value="" />
        <add key="b" value="" />
        <add key="c" value="" />
        ...
    </myNode>
    ...any other nodes
</myRootNode>
Run Code Online (Sandbox Code Playgroud)

自定义配置类

public class MyRootNode : ConfigurationSection
{
    [ConfigurationProperty("myNode")]
    public MyNodeElement MyNode
    {
        get { return (MyNodeElement)this["myNode"]; }
    }
}

[ConfigurationCollection(typeof(BaseElement), AddItemName = "add")]
public class MyNodeElement : ConfigurationElementCollection
{
    protected override ConfigurationElement CreateNewElement()
    {
        return new BaseElement();
    }

    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((BaseElement)element).Key;
    }

    public BaseElement this[int index]
    {
        get { return this.BaseGet(index) as …
Run Code Online (Sandbox Code Playgroud)

c# settings configuration

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

asp.net MVC 1.0和2.0货币模型绑定

我想创建模型绑定功能,以便用户可以输入','''.等等,用于绑定到我的ViewModel的double值的货币值.

我能够通过创建自定义模型绑定器在MVC 1.0中执行此操作,但是自从升级到MVC 2.0后,此功能不再有效.

有没有人有任何想法或更好的解决方案来执行此功能?更好的解决方案是使用一些数据注释或自定义属性.

public class MyViewModel
{
    public double MyCurrencyValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

一个首选的解决方案是这样的......

public class MyViewModel
{
    [CurrencyAttribute]
    public double MyCurrencyValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

下面是我在MVC 1.0中进行模型绑定的解决方案.

public class MyCustomModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        object result = null;

        ValueProviderResult valueResult;
        bindingContext.ValueProvider.TryGetValue(bindingContext.ModelName, out valueResult);
        bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueResult);

        if (bindingContext.ModelType == typeof(double))
        {
            string modelName = bindingContext.ModelName;
            string attemptedValue = bindingContext.ValueProvider[modelName].AttemptedValue;

            string wantedSeperator = NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;
            string alternateSeperator = (wantedSeperator == …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc currency modelbinders data-annotations

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

如何在锯齿状数组中查找唯一值

我想知道如何计算锯齿状数组中唯一值的数量.

我的域对象包含一个具有空格分隔值的字符串属性.

class MyObject
{
    string MyProperty; //e.g = "v1 v2 v3"
}
Run Code Online (Sandbox Code Playgroud)

给定一个MyObject 列表,如何确定唯一值的数量?

以下linq代码返回锯齿状数组值的数组.一种解决方案是存储临时单个项目数组,循环遍历每个锯齿状数组,如果值不存在,则添加它们.然后一个简单的计数将返回唯一的值数.但是,想知道是否有更好的解决方案.

db.MyObjects.Where(t => !String.IsNullOrEmpty(t.MyProperty))
    .Select(t => t.Categories.Split(new char[] { ' ' },
        StringSplitOptions.RemoveEmptyEntries))
    .ToArray()
Run Code Online (Sandbox Code Playgroud)

以下是一个更具可读性的示例:

array[0] = { "v1", "v2", "v3" }
array[1] = { "v1" }
array[2] = { "v4", "v2" }
array[3] = { "v1", "v5" }
Run Code Online (Sandbox Code Playgroud)

从所有值中,唯一项为v1,v2,v3,v4,v5.

唯一商品的总数为5.

有没有一个解决方案,可能使用linq,只返回唯一值或返回唯一值的数量?

c# linq arrays jagged-arrays

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

WPF:布局的最佳实践是什么

我正在尝试掌握 WPF 应用程序中设置样式/绑定数据的不同方式。为了更好地理解这一点,我希望获得关于如何设计我的具体示例的建议/帮助。

下面的屏幕截图展示了我想要的外观。我还包括了我已经编写的代码。然而,这只是使用简单的 StackPanel 输出主标题和下面的文本。

我的第一个问题是关于多少“信息”,以及应该将哪些内容放入视图中,然后在我的 resources.xaml 中应设置哪些样式以及如何设置样式?这可能很模糊,但我想了解我应该考虑将哪些控件包含在我的视图中,以及我应该考虑将哪些代码放入我的样式中。

图片示例 WPF 控件示例

MyView.xaml

<ScrollViewer VerticalScrollBarVisibility="Auto" Padding="20 0">
    <ItemsControl ItemsSource="{Binding MyModelList}" ItemTemplate="{StaticResource MyViewDataTemplate}" >
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel Orientation="Vertical" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

资源.xaml

<DataTemplate x:Key="MyViewDataTemplate">
    <Border BorderThickness="0 0 0 1" BorderBrush="Black">
        <StackPanel>
            <Label Content="{Binding Heading}" FontSize="24" />
            <Label>
                <Label.Content>
                    <TextBlock>
                        <TextBlock.Text>
                            <MultiBinding StringFormat="Card: {0}, {1}">
                                <Binding Path="PropertyA"></Binding>
                                <Binding Path="PropertyB"></Binding>
                            </MultiBinding>
                        </TextBlock.Text>
                    </TextBlock>
                </Label.Content>
            </Label>
        </StackPanel>
    </Border>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

c# wpf styles

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