小编Dax*_*x70的帖子

什么是在ASP.NET上检测JSON请求的最佳方法

大多数ajax框架似乎在标头或查询字符串上使用"X-Request-With"进行标准化.

在ASP.NET MVC中,您可以使用扩展方法

Request.IsAjaxRequest()
Run Code Online (Sandbox Code Playgroud)

因为ajax客户端可以请求几种不同的内容类型,而不仅仅是"application/json"ex:"application/xml".

我正在使用以下代码片段/扩展方法,但我希望看到其他人在做什么,或者是否有我错过的内容,或更好的方法.

public static bool IsJsonRequest(this HttpRequestBase request)
{
    return request.Headers["Accept"].Split(',') 
       .Any(t => t.Equals("application/json", StringComparison.OrdinalIgnoreCase));
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

c# asp.net ajax asp.net-mvc

20
推荐指数
3
解决办法
9480
查看次数

ASP.NET MVC 3 HtmlHelper异常无法识别继承接口上的ModelMetadata

升级到MVC 3 RTM后,我得到了一个以前工作的例外.

这是场景.我有几个使用相同底层接口IActivity和IOwned的对象.

IActivity implements IOwned (another interface)

public interface IActivity:IOwned {...}

public interface IOwned 
{
    int? AuthorId {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我有一个局部视图,它使用IActivity从其他具体的部分重用.

以下是Activity Partial的定义.

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IActivity>" %>
<%: Html.HiddenFor(item => item.AuthorId) %>
Run Code Online (Sandbox Code Playgroud)

但是,它会引发异常.它在ModelMetadata中找不到AuthorId.

我猜测在之前的版本中它查看了IActivity实现的接口.

任何想法,建议,到处都没有重复类似的接口?

复制下面的堆栈跟踪.

[ArgumentException: The property IActivity.AuthorId could not be found.]
   System.Web.Mvc.AssociatedMetadataProvider.GetMetadataForProperty(Func`1 modelAccessor, Type containerType, String propertyName) +498313
   System.Web.Mvc.ModelMetadata.GetMetadataFromProvider(Func`1 modelAccessor, Type modelType, String propertyName, Type containerType) +101
   System.Web.Mvc.ModelMetadata.FromLambdaExpression(Expression`1 expression, ViewDataDictionary`1 viewData) +393
   System.Web.Mvc.Html.InputExtensions.HiddenFor(HtmlHelper`1 htmlHelper, Expression`1 expression, IDictionary`2 htmlAttributes) +57
   System.Web.Mvc.Html.InputExtensions.HiddenFor(HtmlHelper`1 htmlHelper, Expression`1 expression) +51
   ASP.views_shared_activity_ascx.__Render__control1(HtmlTextWriter …
Run Code Online (Sandbox Code Playgroud)

asp.net html-helper modelmetadata asp.net-mvc-3

18
推荐指数
5
解决办法
4913
查看次数

C#扩展方法优先级

我对扩展方法的工作原理有点困惑.

如果我正确地阅读这个http://msdn.microsoft.com/en-us/library/bb383977.aspx并且这个如果扩展方法与密封类中的方法具有相同的签名,那么调用优先级是什么?.

然后以下应该写出"实例",而是写入"扩展方法".

interface IFoo
{
}

class Foo : IFoo
{
    public void Say()
    {
        Console.WriteLine("Instance");
    }
}

static class FooExts
{
    public static void Say(this IFoo foo)
    {
        Console.WriteLine("Extension method");
    }
}

class Program
{
    static void Main(string[] args)
    {
        IFoo foo = new Foo();
        foo.Say();
    }
}
Run Code Online (Sandbox Code Playgroud)

澄清澄清行为的任何帮助.

.net c# extension-methods c#-3.0

12
推荐指数
1
解决办法
1220
查看次数

有没有办法动态包装/拦截HtmlHelper扩展方法.想想装饰模式

我想包装/拦截System.Web.Mvc.Html中提供的HtmlHelper扩展方法(TextBox,Hidden等),以便在2个单独的用例中重用相同的部分视图.部分:

@model BlogEntry

@Html.TextBoxFor(t => t.Title)
@Html.TextAreaFor(t => t.Body)
@* Etc *@
Run Code Online (Sandbox Code Playgroud)

Partial的调用者将知道上下文(即是否覆盖或离开MS imp).

覆盖的原因是多种多样的.例如:在JQuery模板中使用,其中value属性的输出在上面的示例中为"$ {Title}"或者添加Html5元数据.

asp.net asp.net-mvc html-helper razor asp.net-mvc-3

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