小编Ale*_*eby的帖子

使用Razor声明性视图中的MVC HtmlHelper扩展

我试图在我的App_Code文件夹中为MVC 3 RTM项目创建一个Razor声明性帮助器.

我遇到的问题是MVC HtmlHelper扩展(如ActionLink)不可用.这是因为编译的帮助程序派生自System.Web.WebPages.HelperPage,虽然它公开了一个Html属性,但它的类型System.Web.WebPages.HtmlHelper而不是System.Web.Mvc.HtmlHelper.

我得到的一种错误的例子是:

'System.Web.Mvc.HtmlHelper'不包含'ActionLink'的定义,也没有扩展方法'ActionLink'接受类型为'System.Web.Mvc.HtmlHelper'的第一个参数'(你是否缺少using指令)或汇编参考?)

我唯一的解决方案是创建自己的HelperPage并覆盖Html属性:

using System.Web.WebPages;

public class HelperPage : System.Web.WebPages.HelperPage 
{
    // Workaround - exposes the MVC HtmlHelper instead of the normal helper
    public static new HtmlHelper Html
    {
        get { return ((System.Web.Mvc.WebViewPage) WebPageContext.Current.Page).Html; }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我必须在每个助手的顶部写下面的内容:

@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html

@helper DoSomething()
{
    @Html.ActionLink("Index", "Home")
}
Run Code Online (Sandbox Code Playgroud)

它是否意味着在MVC 3中这么难,或者我做错了什么?

asp.net-mvc razor asp.net-mvc-3

121
推荐指数
5
解决办法
7万
查看次数

将工作簿中的每个工作表保存为单独的CSV文件

如何将每个工作表保存在Excel工作簿中以CSV使用宏分隔文件?

我有一个excel有多张表,我正在寻找一个宏,将每张表单独保存CSV (comma separated file).Excel不允许您将所有工作表保存到不同的CSV文件.

csv excel vba

75
推荐指数
5
解决办法
13万
查看次数

如何将System.Type转换为可为空的版本?

其中一个:"是否有一种更简单的内置处理方式而不是我的帮助方法?"

所以从可空类型中获取底层类型很容易,但是如何获得.NET类型的可空版本呢?

所以我有

typeof(int)
typeof(DateTime)
System.Type t = something;
Run Code Online (Sandbox Code Playgroud)

而且我要

int? 
DateTime?
Run Code Online (Sandbox Code Playgroud)

要么

Nullable<int> (which is the same)
if (t is primitive) then Nullable<T> else just T
Run Code Online (Sandbox Code Playgroud)

有内置方法吗?

.net c#

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

如何使用Visual Studio Test中的资源文件中的特定异常消息测试预期的异常?

Visual Studio Test可以使用ExpectedException属性检查预期的异常.您可以传递这样的异常:

[TestMethod]
[ExpectedException(typeof(CriticalException))]
public void GetOrganisation_MultipleOrganisations_ThrowsException()
Run Code Online (Sandbox Code Playgroud)

您还可以检查ExpectedException中包含的消息,如下所示:

[TestMethod]
[ExpectedException(typeof(CriticalException), "An error occured")]
public void GetOrganisation_MultipleOrganisations_ThrowsException()
Run Code Online (Sandbox Code Playgroud)

但是在测试I18N应用程序时,我会使用资源文件来获取该错误消息(如果我愿意,任何人甚至可能决定测试错误消息的不同本地化,但Visual Studio不允许我这样做:

[TestMethod]
[ExpectedException(typeof(CriticalException), MyRes.MultipleOrganisationsNotAllowed)]
public void GetOrganisation_MultipleOrganisations_ThrowsException()
Run Code Online (Sandbox Code Playgroud)

编译器将给出以下错误:

属性参数必须是属性的常量表达式,typeof表达式或数组创建表达式

有人知道如何测试具有资源文件消息的异常吗?


我考虑过的一个选项是使用自定义异常类,但基于经常听到的建议,例如:

"如果您有一个错误条件,可以以与任何其他现有异常不同的方式以编程方式处理,则创建并抛出自定义异常.否则,抛出一个现有异常." 资源

我不希望在正常流程中以不同方式处理异常(这是一个关键的例外,所以我无论如何都要进入恐慌模式)并且我认为为每个测试用例创建一个例外是不对的.任何意见?

unit-testing exception internationalization visual-studio

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

ASP.NET MVC + IIS7 + FireFox:URL中的斜杠

注意:我已经花了几个小时挖掘答案,但找不到答案.

我有一个ASP.NET MVC(2.0)应用程序,托管在IIS7(集成模式)上.

当发出GET请求时/Toons/List- 我得到一个/Toons/List/预期的重定向(302).

问题
但是当我发送POST请求时,请说/Toons/Add(注意没有尾随斜杠)服务器再次返回,重定向(302)/Toons/Add/.此时,FireFox错误地将GET请求发送到该重定向到URL.即[GET] /Toons/Add/代替[POST] /Toons/Add/.这是不正确的,但已知的行为.由于没有[GET] /Toons/Add/- 我没有找到资源(404).

我使用webhost4life托管我的应用程序并且无法访问IIS7,这限制了我对URL重写和使用模块的使用(我正在与他们一起解决这个问题).但是ISAPI是最好的方式吗?我不知道这样做会感觉很好.

这是一个常见的问题,我很惊讶我找不到一个简单的解决方案.

是否存在不涉及使用.aspx/.mvc后缀和URL重写的解决方案?
在这两个中,如果必须的话,我应该选择哪一个?

有什么想法/建议吗?

编辑:
我已经阅读http://www.hanselman.com/blog/ASPNETMVCAndTheNewIIS7RewriteModule.aspx,正如我所说,我正在努力寻找一个更简单的解决方案,一个"正常工作"选项.

编辑:
已经看到解决方案与/每个URL 附加斜杠(),再次,似乎不是最优雅的解决方案.

iis asp.net-mvc url-rewriting

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

如何最好地将DbType转换为System.Type?

如何最好地将System.Data.DbType枚举值转换为相应的(或至少一个可能的相应)System.Type值?

例如:

DbType.StringFixedLength -> System.String 
DbType.String -> System.String
DbType.Int32 -> System.Int32
Run Code Online (Sandbox Code Playgroud)

我只看到非常"脏"的解决方案,但没有什么真正干净.

(是的,它是对我的另一个问题的跟进,但它作为两个单独的问题更有意义)

.net converter

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

避免Azure DocumentDB存储过程中的SQL注入

我怎样才能避免sql注入Azure DocumentDB存储过程?

除了清理输入(白名单字符)之外,这里的最佳做法是什么?

例如,以下从MSDN示例改编的存储过程:

function simple_sp(s1) {
   var context = getContext();
   var collection = context.getCollection();
   var response = context.getResponse();

   collection.queryDocuments(collection.getSelfLink(), 
      'SELECT * FROM Families f where f.id  = "' + s1 + '"', {}, 
      function(res){}
   );
}
Run Code Online (Sandbox Code Playgroud)

该s1参数是将sql注入查询的标准示例.到目前为止,我还没有找到一种参数化查询的方法.

sql-injection azure-cosmosdb

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

用于ODBC连接的SQL命令ISNULL

我通过ODBC连接到OpenEdge DataServer(不是我们的产品,我们只是访问他们的数据库,我几乎没有任何信息,当然也没有来自另一方的帮助).

无论如何,我只需要执行一个简单的Select,添加几行,我需要等效的IsNull语句.

基本上我想执行

SELECT ISNULL(NULL,'test')
Run Code Online (Sandbox Code Playgroud)

这会因语法错误而失败.我看了一下他们误导性地称之为"文档"的东西,但是只有对SP_SQL_ISNULL的引用,但我也无法使用它.我适合T-SQL,所以任何方向的指针都会受到赞赏,即使它只是一个带有TFM链接的RTFM :)

谢谢

sql odbc openedge

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