我试图在我的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中这么难,或者我做错了什么?
如何将每个工作表保存在Excel工作簿中以CSV使用宏分隔文件?
我有一个excel有多张表,我正在寻找一个宏,将每张表单独保存CSV (comma separated file).Excel不允许您将所有工作表保存到不同的CSV文件.
其中一个:"是否有一种更简单的内置处理方式而不是我的帮助方法?"
所以从可空类型中获取底层类型很容易,但是如何获得.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)
有内置方法吗?
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表达式或数组创建表达式
有人知道如何测试具有资源文件消息的异常吗?
我考虑过的一个选项是使用自定义异常类,但基于经常听到的建议,例如:
"如果您有一个错误条件,可以以与任何其他现有异常不同的方式以编程方式处理,则创建并抛出自定义异常.否则,抛出一个现有异常." 资源
我不希望在正常流程中以不同方式处理异常(这是一个关键的例外,所以我无论如何都要进入恐慌模式)并且我认为为每个测试用例创建一个例外是不对的.任何意见?
注意:我已经花了几个小时挖掘答案,但找不到答案.
我有一个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 附加斜杠(),再次,似乎不是最优雅的解决方案.
如何最好地将System.Data.DbType枚举值转换为相应的(或至少一个可能的相应)System.Type值?
例如:
DbType.StringFixedLength -> System.String
DbType.String -> System.String
DbType.Int32 -> System.Int32
Run Code Online (Sandbox Code Playgroud)
我只看到非常"脏"的解决方案,但没有什么真正干净.
(是的,它是对我的另一个问题的跟进,但它作为两个单独的问题更有意义)
我怎样才能避免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注入查询的标准示例.到目前为止,我还没有找到一种参数化查询的方法.
我通过ODBC连接到OpenEdge DataServer(不是我们的产品,我们只是访问他们的数据库,我几乎没有任何信息,当然也没有来自另一方的帮助).
无论如何,我只需要执行一个简单的Select,添加几行,我需要等效的IsNull语句.
基本上我想执行
SELECT ISNULL(NULL,'test')
Run Code Online (Sandbox Code Playgroud)
这会因语法错误而失败.我看了一下他们误导性地称之为"文档"的东西,但是只有对SP_SQL_ISNULL的引用,但我也无法使用它.我适合T-SQL,所以任何方向的指针都会受到赞赏,即使它只是一个带有TFM链接的RTFM :)
谢谢