小编wil*_*lvv的帖子

ASP.Net MVC Html.HiddenFor有错误的值

我在我的项目中使用MVC 3,我看到一种非常奇怪的行为.

我正在尝试为我的模型上的特定值创建一个隐藏字段,问题是由于某种原因,字段上设置的值与模型中的值不对应.

例如

我有这个代码,就像测试一样:

<%:Html.Hidden("Step2", Model.Step) %>
<%:Html.HiddenFor(m => m.Step) %>
Run Code Online (Sandbox Code Playgroud)

我认为两个隐藏的字段都具有相同的值.我所做的是,第一次显示View时将值设置为1,然后在提交后我将Model字段的值增加1.

因此,第一次渲染页面时,两个控件的值都是1,但第二次渲染的值是:

<input id="Step2" name="Step2" type="hidden" value="2" />
<input id="Step" name="Step" type="hidden" value="1" />
Run Code Online (Sandbox Code Playgroud)

如您所见,第一个值是正确的,但第二个值似乎与我第一次显示View时相同.

我错过了什么?*For Html助手是否以某种方式缓存值?如果是这样,我该如何禁用此缓存?

谢谢你的帮助.

asp.net-mvc hidden-fields asp.net-mvc-3 html.hiddenfor

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

ASP.NET MVC Url.Action将当前路由值添加到生成的URL

我在这里已经多次看到过这个问题,但是没有一个问题可以接受:

ASP.NET MVC @ Url.Action包括当前路由数据
ASP.NET MVC隐式添加路由值

基本上我有一个名为Group的动作方法的Controller,它有一个不接收参数的重载并显示一个元素列表,另一个接收一个id并显示该组的详细信息.

如果我做这样的事情:

Url.Action("Group", "Groups");
Run Code Online (Sandbox Code Playgroud)

从网站的主页面(/)它返回一个这样的网址:

"mysite.com/Groups/Group"
Run Code Online (Sandbox Code Playgroud)

没关系现在,如果站点的当前地址是/ Groups/Group/1并且我调用相同的方法

Url.Action("Group", "Groups");
Run Code Online (Sandbox Code Playgroud)

返回的网址是这样的:

"mysite.com/Groups/Group/1"
Run Code Online (Sandbox Code Playgroud)

它会在生成URL时自动为当前页面添加路由值.即使我这样生成URL:

Url.Action("Group", "Groups", null);
Run Code Online (Sandbox Code Playgroud)

因此,明确指定我不想要任何路由值,生成的URL是相同的.要获取我想要的地址,我必须将路由值显式设置为空字符串,如下所示:

Url.Action("Group", "Groups", new {id=""});
Run Code Online (Sandbox Code Playgroud)

这将生成以下URL:

"mysite.com/Groups/Group"
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么会发生这种情况?如果我没有设置任何路由值,则不应将它们添加到生成的URL中.

url model-view-controller asp.net-mvc routing

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

SQL性能:使用NVarchar(MAX)而不是NVarChar(200)是否有任何性能损失

我想知道在定义nvarchar(max)类型的列时是否有任何缺点,而不是给它一个(更小的)最大大小.

我在某处读到,如果列值超过4?KB,剩余数据将被添加到"溢出"区域,这没关系.

我正在创建一个表格,其中大部分时间文本都是几行,但我想知道设置下限是否有任何优势,然后添加验证以避免违反该限制.

使用nvarchar(max)列创建索引是否有任何限制,或者是否需要在大小限制上添加限制?

谢谢!

sql-server indexing performance nvarchar

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

ASP.NET MVC:使浏览器从操作中缓存图像

我有一个actionmethod返回一个文件,只有一个参数(一个id).

例如

public ActionResult Icon(long id)
{
    return File(Server.MapPath("~/Content/Images/image" + id + ".png"), "image/png");
}
Run Code Online (Sandbox Code Playgroud)

我希望浏览器在我第一次访问它时自动缓存此映像,以便下次不必下载所有数据.

我尝试过使用OutputCacheAttribute之类的东西,并在响应上手动设置标题.即:

[OutputCache(Duration = 360000)]
Run Code Online (Sandbox Code Playgroud)

要么

Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetExpires(Cache.NoAbsoluteExpiration); 
Run Code Online (Sandbox Code Playgroud)

但是每次我在浏览器上点击F5时,图像仍会加载(我在Chrome和IE上尝试).(我知道每次都会加载它,因为如果我更改了图像,它也会在浏览器中更改).

我看到HTTP响应有一些显然应该工作的标题:

Cache-Control:public,max-age = 360000

内容长度:39317

内容类型:图像/ PNG

日期:2012年1月31日星期二23:20:57 GMT

到期日:2012年2月5日,星期日03:20:56 GMT

最后修改时间:2012年1月31日星期二23:20:56 GMT

但请求标头有这个:

附注:无缓存

有关如何做到这一点的任何想法?

非常感谢

asp.net-mvc caching http

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

Jersey:带有1个元素的Json数组被序列化为对象

我正在使用Jersey/Java创建一个REST服务器,我发现了一个奇怪的行为.

我在服务器上有一个方法,它返回一个对象数组作为Json

@GET
@Path("/files")
@Produces(MediaType.APPLICATION_JSON)
public Object getFiles() throws Exception{
    DatabaseManager db = new DatabaseManager();
    FileInfo[] result = db.getFiles();
    return result;
}
Run Code Online (Sandbox Code Playgroud)

代码正确执行,数据返回给客户端(jQuery ajax调用).问题是如果"result"数组有一个元素或多个元素,则返回数据的格式会发生变化.

回复一个元素:

{"fileInfo":{"fileName":"weather.arff","id":"10"}}
Run Code Online (Sandbox Code Playgroud)

回应有两个要素:

{"fileInfo":[{"fileName":"weather.arff","id":"10"},{"fileName":"supermarket.arff","id":"11"}]}
Run Code Online (Sandbox Code Playgroud)

如您所见,在第一个场景中,返回对象的"fileInfo"属性的值是一个对象,在第二种情况下,值是一个数组.我究竟做错了什么?第一种情况不应该返回这样的东西:

{"fileInfo":[{"fileName":"weather.arff","id":"10"}]}
Run Code Online (Sandbox Code Playgroud)

即一个内部有一个对象的数组?

我知道我可以在客户端检测到这一点,但它似乎是一个非常丑陋的黑客.

谢谢你的时间.

java ajax json jersey

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

在SQL Server中,我应该为标识列创建索引,还是自动创建?

我相信当我创建一个identity列时,它会自动编入索引,但我并不是100%肯定.

我应该为identity列创建索引,还是自动创建?

sql-server indexing identity

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

Visual Studio:在项目或解决方案设置上设置默认项目

我有一个包含多个项目的Visual Studio 2010解决方案.其中一个项目被设置为默认项目,但我想默认更改它.

我知道我可以右键单击我想成为启动项目的项目并选择"Set as StartUp project",但此设置将存储在用户的文件(.slo和.user文件)中.

作为公司策略,我们不检查源控制系统中的这些文件,因此当另一个用户打开解决方案时,它将具有不同的项目作为启动对象.

有没有其他方法来设置这些值?像.sln或.proj文件上的设置?

谢谢

settings configuration visual-studio-2010

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

在C#中,使用x.509证书签署xml并检查签名

我正在尝试使用x.509证书签署XML文件,我可以使用私钥对文档进行签名,然后使用CheckSignature方法(它具有接收证书作为参数的重载)来验证签名.

问题是验证签名的用户必须拥有证书,我担心的是,如果用户拥有证书,那么他可以访问私钥,据我所知,这是私有的,应该只对用户可用谁签字.

我错过了什么?

谢谢你的帮助.

c# xml digital-certificate digital-signature x509certificate2

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

获取动态对象中方法的泛型类型调用

我开始使用.Net中的动态对象,我无法弄清楚如何做某事.

我有一个继承自DynamicObject的类,我重写了TryInvokeMember方法.

例如

class MyCustomDynamicClass : DynamicObject
{
    public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
    {
        // I want to know here the type of the generic argument
    }
}
Run Code Online (Sandbox Code Playgroud)

在该方法中,我想知道调用中泛型参数的类型(如果有的话).

例如,如果我调用以下代码,我想在动态对象的覆盖方法中获取System.Boolean和System.Int32的值

dynamic myObject = new MyCustomDynamicClass();
myObject.SomeMethod<bool>("arg");
myObject.SomeOtherMethod<int>("arg");
Run Code Online (Sandbox Code Playgroud)

目前,如果我在覆盖方法中放置一个断点,我可以得到被调用方法的名称("SomeMethod"和"SomeOtherMethod",以及参数的值,但不是泛型类型).

我怎样才能获得这些价值?

谢谢!

c# generics dynamic dynamicobject

15
推荐指数
1
解决办法
2584
查看次数

ASP.NET MVC在action方法中删除查询字符串

我有一个看起来像这样的动作方法:

public ActionResult Index(string message)
{
  if (message != null)
  {
    ViewBag.Message = message;
  }
  return View();
}
Run Code Online (Sandbox Code Playgroud)

发生的事情是,对此请求的URL将如下所示:

www.mysite.com/controller/?message=Hello%20world
Run Code Online (Sandbox Code Playgroud)

但我希望它只是看起来

www.mysite.com/controller/
Run Code Online (Sandbox Code Playgroud)

有没有办法删除actionmethod中的查询字符串?

asp.net asp.net-mvc routing query-string

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