我正在尝试将ViewData传递到我的asp.net mvc主页,以获取我保留在母版页上的mvc usercontrol.例如,我创建了一个名称下拉列表作为mvc usercontrol,我把它放在我的母版页中.
我遇到的问题是将ViewData传递给母版页.我发现微软的这篇文章有一个不错的解决方案,但我想知道是否还有其他"更好"的解决方案.我不喜欢链接中的解决方案是我必须更改每个控制器以继承新的控制器类.
http://www.asp.net/learn/MVC/tutorial-13-cs.aspx
编辑:我正在看的问题是,如果我将用户控件放在依赖于ViewData的母版页中,我必须为使用所述母版页的每个页面重复包含该ViewData.上述链接中的解决方案可能是最佳解决方案,但我希望还有其他替代方案.
我有一个名为"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,我无法弄清楚如何从控制器获取它们(传入我的类方法)
作为单元测试的一部分,我试图模拟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获取值?
我需要帮助弄清楚为什么我的身份验证票证在我的托管网站上大约一个小时后到期.但是,如果我在本地运行该站点,则身份验证票证会在正确的时间内保持活动状态.
这是我的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)
我知道正在创建身份验证票证,因为:
当我在浏览器中检查cookie过期日期时,它是2周后.但是,大约一个小时后,我的身份验证总是会过期.
我该怎么做才能弄清楚为什么托管网站的身份验证过早到期?我不知道如何解决这个问题,因为这是我唯一一个遇到问题的托管网站.
更新1:等待1小时后,我检查我的浏览器,我发现cookie仍然存在.事实上,它的失效日期设定为2周后.但是,如果我重新加载页面或尝试访问需要身份验证的任何页面,我将被带到登录页面.
asp.net authentication cookies asp.net-mvc asp.net-membership
ExecuteQuery()方法返回一个IEnumerable但有没有办法让它返回IQueryable?
是否在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-mvc ×5
asp.net ×2
controller ×1
cookies ×1
iqueryable ×1
linq ×1
linq-to-sql ×1
master-pages ×1
mocking ×1
moq ×1
tdd ×1
viewdata ×1
web-config ×1