小编cod*_*tte的帖子

将viewdata传递给asp.net mvc masterpages

我正在尝试将ViewData传递到我的asp.net mvc主页,以获取我保留在母版页上的mvc usercontrol.例如,我创建了一个名称下拉列表作为mvc usercontrol,我把它放在我的母版页中.

我遇到的问题是将ViewData传递给母版页.我发现微软的这篇文章有一个不错的解决方案,但我想知道是否还有其他"更好"的解决方案.我不喜欢链接中的解决方案是我必须更改每个控制器以继承新的控制器类.

http://www.asp.net/learn/MVC/tutorial-13-cs.aspx

编辑:我正在看的问题是,如果我将用户控件放在依赖于ViewData的母版页中,我必须为使用所述母版页的每个页面重复包含该ViewData.上述链接中的解决方案可能是最佳解决方案,但我希望还有其他替代方案.

asp.net-mvc viewdata master-pages

6
推荐指数
1
解决办法
5988
查看次数

以编程方式获取到控制器操作(url)的路由

我有一个名为"AccountController"的控制器和名为"ResetPassword"的操作.从html标记我可以做类似的事情:

<%= Html.ActionLink("LinkText", "ResetPassword", "AccountController") %>
Run Code Online (Sandbox Code Playgroud)

它会输出正确的网址.有没有办法以编程方式执行此操作?我试图将url作为另一个类中的字符串,但System.Web.Mvc.HtmlHelper没有ActionLink()静态方法,并且创建该类的实例也没有.

注意:如果我尝试创建HtmlHelper或UrlHelper的实例,那么我需要引用View Context或Request Context,我无法弄清楚如何从控制器获取它们(传入我的类方法)

asp.net-mvc controller

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

使用Moq模拟FormsIdentity.Ticket.UserData

作为单元测试的一部分,我试图模拟FormsIdentity.Ticket.UserData的返回值

以下将不起作用,但它应该让我知道我想要做什么:

var principal = Mock<IPrincipal>();
var formsIdentity = Mock<FormsIdentity>();
formsIdentity.Setup(a => a.Ticket.UserData).Returns("aaa | bbb | ccc");
principal.Setup(b => b.Identity).Returns(formsIdentity.Object);
Run Code Online (Sandbox Code Playgroud)

我试图测试的代码看起来像这样:

FormsIdentity fIdentity = HttpContext.Current.User.Identity as FormsIdentity;
string userData = fIdentity.Ticket.UserData;
Run Code Online (Sandbox Code Playgroud)

我想在单元测试中做的就是伪造FormsIdentity.Ticket.UserData的返回值.但是当我在第一部分运行代码时,我在尝试模拟FormsIdentity时遇到错误.错误说mock的类型必须是接口,抽象类或非密封类.

我试图使用IIdentity而不是FormsIdentity(FormsIdentity是IIdentity的一个实现)但是IIdentity没有.Ticket.UserData.

那么如何编写此测试以便从FormsIdentity.Ticket.UserData获取值?

tdd asp.net-mvc moq mocking

6
推荐指数
1
解决办法
1052
查看次数

弄清楚为什么asp.net身份验证票证即将到期

我需要帮助弄清楚为什么我的身份验证票证在我的托管网站上大约一个小时后到期.但是,如果我在本地运行该站点,则身份验证票证会在正确的时间内保持活动状态.

这是我的localhost web.config:

<authentication mode="Forms">
    <forms loginUrl="~/Account/LogOn" timeout="20160" slidingExpiration="true" path="/" />
</authentication>
Run Code Online (Sandbox Code Playgroud)

这是我托管的web.config:

<authentication mode="Forms">
    <forms loginUrl="~/Account/LogOn" timeout="20160" slidingExpiration="true" domain=".mywebsite.com" path="/" />
</authentication>
Run Code Online (Sandbox Code Playgroud)

我知道正在创建身份验证票证,因为:

  • 我可以在浏览器中看到它
  • 即使在关闭浏览器并重新打开后我仍然保持登录状态
  • 即使在网站回收后我仍然保持登录状态(更改并保存web.config以进行回收)

当我在浏览器中检查cookie过期日期时,它是2周后.但是,大约一个小时后,我的身份验证总是会过期.

我该怎么做才能弄清楚为什么托管网站的身份验证过早到期?我不知道如何解决这个问题,因为这是我唯一一个遇到问题的托管网站.

更新1:等待1小时后,我检查我的浏览器,我发现cookie仍然存在.事实上,它的失效日期设定为2周后.但是,如果我重新加载页面或尝试访问需要身份验证的任何页面,我将被带到登录页面.

asp.net authentication cookies asp.net-mvc asp.net-membership

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

linq to sql ExecuteQuery()为IQueryable

ExecuteQuery()方法返回一个IEnumerable但有没有办法让它返回IQueryable?

linq iqueryable linq-to-sql

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

在web.config中添加machinekey后出现性能问题

是否在web.config的system.web中添加machinekey会导致任何性能问题?

我在web.config中添加了这样的东西:

<system.web>
    <machineKey validationKey="aaa"
    decryptionKey="bbb" validation="SHA1" />
</system.web>
Run Code Online (Sandbox Code Playgroud)

而现在它似乎运行得慢了很多.我正在使用firebug来查看页面的加载速度.

在这个问题之后我最终遇到了这个问题

注意:这不是我正在使用的实际机器密钥.我有一个合适的机器钥匙.

asp.net asp.net-mvc web-config

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