以下是我的视图的目录布局的简单概述:
项目
问题
我正在使用表单身份验证来拒绝所有未经身份验证的用户访问,这很好.但是,我希望能够向所有人授予访问RSS视图的权限(因此他们可以通过谷歌阅读器和东西订阅)
我了解您可以通过将以下页面添加到web.config来授予对页面的访问权限
<location path="TOURPAGE.aspx">
<system.web>
<authorization>
<allow users="*" />
<allow users="?" />
</authorization>
</system.web>
Run Code Online (Sandbox Code Playgroud)
但是,我如何使用动态制作的URL进行此操作,例如:
Issues/RSS/chrisj
Run Code Online (Sandbox Code Playgroud)
编辑
我认为已经修复了一些答案,但是:
看来,至少在我的情况下,您仍然需要身份验证cookie才能看到该页面.只要你有cookie,就可以注销并查看它.
这对我来说不好,我需要页面完全公开,因为它是一个RSS提要.
我想超越ASP mvc中给出的默认错误处理.我有一个错误控制器,所以我希望根据发生的事情给出不同的错误消息:即无效的参数,权限被拒绝,OMG DATABASE DEAD等.
但我似乎无法解决如何做到这一点,这是我尝试过的:
[HandleError(View="/Errors/InvalidArgument",ExceptionType=typeof(ArgumentException))]
Run Code Online (Sandbox Code Playgroud)
它最终导致运行时错误.
此外,在同一主题上,是否可以添加更多可以传递给错误控制器的参数,例如:
[HandleError(View="/Errors/InvalidArgument",ExceptionType=typeof(ArgumentException), Error="dumb arguments")]
Run Code Online (Sandbox Code Playgroud)
谢谢
数据库示例:
图像 - ImageTag - 标记
图像可以有多个标签.关系设置很好,但我遇到了性能问题.
我有许多不同的查询,根据不同的标准选择图像.它们工作正常,但是不会使用这些查询选择标记的数据.
这意味着如果我遍历10个图像的列表并尝试访问其标记对象(通过ImageTag),则在我的数据库上为每个图像执行新的查询.
<%foreach (LINQRepositories.Image i in Model)
{ %>
<li><%=i.title%>
<ul>
<%foreach(ImageTag t in i.ImageTags){ %>
<li><%=t.Tag.name%></li>
<%} %>
</ul>
</li>
<%} %>
Run Code Online (Sandbox Code Playgroud)
这显然不太理想.有没有办法强制LINQ to SQL查询某些数据?
以下是我的一个查询示例
public static IQueryable<Image> WithTags(this IQueryable<Image> qry, IEnumerable<Tag> tags)
{
return
from i in qry
from iTags in i.ImageTags
where tags.Contains(iTags.Tag)
select i;
}
Run Code Online (Sandbox Code Playgroud)
尝试dataload选项后,这是一个生成的示例查询
{SELECT [t0].[id],[t0].[title],[t0].[legend],[t0].[dateAdded],[t0].[删除],[t0].[averageRating], [t0].[numberOfVotes],[t0].[imageOfTheWeek],[t0].[copyright],[t0].[copyrightText],[t0].[areaOfInterest],[t0].[typeId],[t0 ].[authorId],[t0].[editorialStatusId],[t0].[comments] FROM [dbo].[Image] AS [t0] CROSS JOIN([dbo].[ImageTag] AS [t1] INNER JOIN [ dbo].[Tag] AS [t2] ON [t2].[id] = …
我有两个非常相似的方法:
public IQueryable<User> Find(Func<User, bool> exp)
{
return db.Users.Where(exp);
}
public IQueryable<User> All()
{
return db.Users.Where(x => !x.deleted);
}
Run Code Online (Sandbox Code Playgroud)
顶部的一个,不会编译,说它返回IEnumerable而不是IQueryable.
为什么是这样?
此外,我知道我可以在最后添加"AsQueryable()",它将工作.虽然这有什么不同?任何表演命中?我知道IQueryable延迟执行等等,我还能获得这个好处吗?
我有两个查询返回同一类对象的集合,在完成这两个查询之后,我想将它们联合起来.
var results = from t in All()
where t.Blah.Contains(blahblah)
select t;
var results2 = from t in All()
where t.blah2.contains(blahblah)
select t;
return results.Union(results2);
Run Code Online (Sandbox Code Playgroud)
这是有可能的是,第二个查询可能返回任何结果,并且是null.
看起来如果我尝试与两者进行联合,如果第二个参数为null,它将抛出一个ArgumentNullException.
显而易见的答案是只对.ToList()第二个查询执行以查看它是否包含任何内容.这个问题是我试图利用延迟执行,并且不想在此阶段实际执行数据库上的查询.
有没有办法解决?
编辑 - 解决方案
var results2 = from t in All()
where t.blah2!=null && t.blah2.Contains(blahblah)
select t;
Run Code Online (Sandbox Code Playgroud)
基本上,当我尝试在空列表上执行包含时,实际查询返回null
谢谢您的帮助!
我使用扩展方法扩展html助手来制作RSS转发器:
public static string RSSRepeater(this HtmlHelper html, IEnumerable<IRSSable> rss)
{
string result="";
foreach (IRSSable item in rss)
{
result += "<item>" + item.GetRSSItem().InnerXml + "</item>";
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
所以我让我的一个业务对象实现IRSSable,并尝试将其传递给HTML帮助器.但我似乎无法使它工作,我尝试过:
<%=Html.RSSRepeater(ViewData.Model.GetIssues(null, null, "") as IEnumerable<IRSSable>) %>
Run Code Online (Sandbox Code Playgroud)
编译正常,但传递null
<%=Html.RSSRepeater(ViewData.Model.GetIssues(null, null, "")) %>
Run Code Online (Sandbox Code Playgroud)
Intellisense抱怨无法将IEnumerable问题传递给IEnumberable IRSSable
IEnumberable<Issue>肯定会返回并且问题肯定会实现IRSSAble我有一个linq to sql数据库.非常简化,我们有3个表,项目和用户.有一个名为User_Projects的连接表将它们连接在一起.
我已经有了一种获取IEnumberable<Project>给定用户的工作方法.
from up in User_Projects
select up.Project;
Run Code Online (Sandbox Code Playgroud)
现在我想获得用户没有参与的项目.我认为IEnumerable的except方法在这里会很不错:
return db.Projects.Except(GetProjects());
Run Code Online (Sandbox Code Playgroud)
编译但是我得到一个运行时错误:"除了Contains()运算符之外,本地序列不能用于查询运算符的LINQ to SQL实现."
有没有办法解决这个问题?
一些观点,但没有答案:p
我试过这个:
IEnumerable<Project> allProjects = db.Projects;
IEnumerable<Project> userProjects = GetProjects();
return allProjects.Except(GetProjects());
Run Code Online (Sandbox Code Playgroud)
我知道它与原始语句基本相同 - 但现在我没有得到运行时错误.不幸的是,它并没有真正做除了部分,只是因为某些原因返回所有项目
我了解您可以使用表单身份验证根据您选择的条件授予/拒绝对某些页面的访问权限.
但是我希望比这更具体一点,并且说,根据用户的权限为用户显示不同的按钮.
我知道我可以做点什么
if(((User)ViewData["CurrentUser"]).IsEmployee).....
Run Code Online (Sandbox Code Playgroud)
但这似乎并不优雅,很快就会变得混乱.
是否有任何指南/工具/框架功能可以帮助我在这里?
我有两个字符串:
在我看来,第一段文字显示在UILabel中,我调整标签的大小以适应文本的大小.这意味着我不能只在屏幕上放置另一个UILabel,至少在没有重新定位的情况下......不知何故.
我需要能够把第二段文本放在句子的末尾 - 并且上标
我真的不知道如何实现这个目标!
我有一个CasperJS的测试步骤,它执行以下操作:
this.fillSelectors("#registration-form", {
"#first-name": "Bob",
"#last-name": "Smith",
"#email-address": RANDOM_EMAIL,
"#password": PASSWORD,
"#password-confirm": PASSWORD
}, true);
Run Code Online (Sandbox Code Playgroud)
我希望能够发送HTTP标头.如果没有"手动"发布表单,我似乎无法找到这样做的方法,这不是我想要的那种测试.
c# ×5
asp.net-mvc ×4
linq ×3
linq-to-sql ×2
casperjs ×1
form-submit ×1
http-headers ×1
interface ×1
iphone ×1
iqueryable ×1
javascript ×1
objective-c ×1
performance ×1
permissions ×1
phantomjs ×1
security ×1
uilabel ×1
union ×1