小编Osk*_*ren的帖子

Razor & null 传播 - 在显式 C# 6 MVC 5 项目下不工作

当前的项目:

我的剃刀代码:

@if(Session["Type"]?.ToString() == "Insurance") {
  <text>policy of insurance</text>
} else if(Session["Type"]?.ToString() == "Warranty") {
  <text>policy of warranty</text>
} else {
  <text>protection policy</text>
}
Run Code Online (Sandbox Code Playgroud)

Visual Studio 明确地将此标记为错误,

功能“空传播运算符”在 C# 5 中不可用。请使用语言版本 6 或更高版本。

和Visual Studio明确使用C#6:

在此处输入图片说明

当我尝试运行页面本身时,出现错误:

CS1525:无效的表达式术语“.”

这表明它明确地在问号后面的句点之后。

这个项目明确作为一个 C# 6 项目开始,我很困惑为什么它重新回到 C#5。

另一个奇怪的问题:这在调试和我的本地测试设置中都运行得很好(我发布到文件系统,使用本地 IIS …

asp.net asp.net-mvc razor asp.net-mvc-5 c#-6.0

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

什么是最好的.NET类型的集合,其中每个键可以有多个值?

我有一个键,但该键的值不同.我尝试过HashTable,但我认为这不是正确的做法.

我将详细解释要求是什么:

我有一把钥匙 - "Asp.net" - 为此我有n个值 - 61,67,100

所以我必须将它存储在像Dictionary或hash表这样的地方.

c#

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

为什么Visual Studio会自动重新启用"客户端应用程序服务"?

我有一个解决方案,包括许多类库项目和一个Windows服务项目.当我打开Windows服务项目的项目设置并(意外地)单击"服务"选项卡时,Visual Studio会坚持自动勾选"启用客户端应用程序服务"复选框.

这样做的结果是它将添加对System.Web.Extensions的引用,并在app.config中插入一些部分.再次禁用该复选框不会删除引用.但是它会删除生成的配置,但它也会删除之前存在的一些不相关的配置.

为什么它坚持勾选这个复选框,我可以让它不这样做吗?"设置"选项卡的帮助文档未提及任何"自动选择"行为.

这是Visual Studio 2010,目标是.Net 3.5.

至少有一个人有同样的问题,遗憾的是没有提供任何解决方案:http: //go4answers.webhost4life.com/Example/visual-studio-2010-keeps-enabling-7689.aspx

这反过来又链接到Microsoft Connect问题,但由于某些原因,它们似乎不允许访问旧版报告:https://connect.microsoft.com/VisualStudio/feedback/details/570166

visual-studio-2010 visual-studio

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

改变了.Net 4中泛型方法的LdToken行为?

给定一个标识非泛型类的开放泛型方法的MethodInfo实例,请考虑以下伪代码:

class Foo { void FooMethod<T>() {} }

public static void PrintMethodInfo(RuntimeMethodHandle methodHandle)
{
    var mi = (MethodInfo) MethodBase.GetMethodFromHandle(methodHandle);
    Console.WriteLine("Method: "+mi.ToString());
}

var methodInfo = typeof(Foo).GetMethod("FooMethod");
Run Code Online (Sandbox Code Playgroud)

生成一个方法"void GeneratedMethod <T>()",在主体中包含此代码:

IL.Emit(OpCodes.Ldtoken, methodInfo);
IL.Emit(OpCodes.Call, methodInfoPrintMethodInfo);
Run Code Online (Sandbox Code Playgroud)

调用GeneratedMethod <int>(),.Net 3.5上的输出将是:

Method: System.Object Method[Int32]()
Run Code Online (Sandbox Code Playgroud)

在.Net 4.0上,它将是:

Method: System.Object Method[T]()
Run Code Online (Sandbox Code Playgroud)

因此,在.Net 2.0/3.5中,ldtoken生成的IL似乎将包含一个元数据标记,该标识符标识通用FooMethod <>实例化,该类型参数在调用GeneratedMethod <T>时给出.

但是,在.Net 4.0中,ldtoken将包含标识开放泛型类型的元数据.

我很难找到支持.Net 3.5案例中发生的事情的文档(事实上,如果生成的方法本身不是通用的,它应该完全失败) - .Net 4的行为似乎更合乎逻辑.我也找不到任何关于这种变化的文件.这是现在修复的早期版本中的错误吗?

.net reflection reflection.emit .net-4.0

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

如何处理集合中每一行重复相同形式的MVC模型绑定前缀?

我的主视图模型有一个ChildViewModel的集合.在视图中,我遍历集合并调用EditorFor(),如下所示:

@for (int i = 0; i < Model.Children.Count; i++)
{
    @Html.EditorFor(m => m.Child[i]);
}
Run Code Online (Sandbox Code Playgroud)

编辑器模板如下所示:

@model ChildModel

@using (Html.BeginForm("EditChild", "MyController"))
{
    @Html.HiddenFor(m => m.ChildId)
    @Html.TextBoxFor(m => m.ChildName)
}
Run Code Online (Sandbox Code Playgroud)

这将生成标记,其中每个子项都是单独的形式,并且每个这样的表单将具有名为Child [0] .ChildName的输入控件.我为每个孩子使用单独的表单,因为孩子们将在每行显示一个,然后用户可以编辑并提交单行.

我的表单操作方法是:

[HttpPost]
public ActionResult EditChild(ChildViewModel form) { }
Run Code Online (Sandbox Code Playgroud)

问题是,当调用它时,模型的所有属性都将为null,因为模型绑定器不知道前缀.在某些情况下,我们可以使用BindAttribute告诉模型绑定器有关前缀的信息,但在这种情况下,前缀不是常量:它将是Child [0],Child [1]等.

总之,我们希望为集合的每一行重复相同的表单,然后允许用户POST一个表单.在这种情况下,Web如何处理id,名称,前缀和模型绑定?

asp.net-mvc model-binding asp.net-mvc-3

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

IList和IList <object>之间的比较 - 是否应该首选?

多年以来,我们大多数时候都使用通用集合.有时我们确实需要任何东西的集合(好吧,通常只有几个不同的东西,但没有共同的基类).对于这种情况,我们可以使用或者IList泛型IList<object>作为方法参数和属性的类型.

有什么理由比较喜欢一个吗?性能特点?

就个人而言,我倾向于IList<object>,因为我认为这更清楚地表明我们确实接受了"任何事情".当输入参数时,IList我们无法立即判断此方法是否接受任何内容,或者缺少泛型是由于历史记录还是草率编码.

c# generics

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

无法在asp.net c中将字符串转换为float

我正在尝试根据我返回的数据库值计算销售和费用的差异.但是当我使用a - b它时会抛出以下错误.虽然我正在转换双倍但它仍然给出错误:

cannot implicitly convert type string to double
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

double a = Double.Parse(reader["sales"].ToString().Trim());
double b  = Double.Parse(reader["expenses"].ToString().Trim());

Label11.Text = a - b;
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

c# asp.net

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