我有以下两种方法从我的数据库中获取数据并返回一个填充的SelectList对象(包括一个"All"选项值),然后我将其传递给我的视图.问题是它们几乎完全相同,除了它们都访问不同的存储库对象并且它们具有不同的ID名称(StatusId和TeamId).我认为有机会将它们重构为一个接受存储库作为参数的方法,并以某种方式计算出ID名称应该是什么,可能是通过使用反射或某种lambda表达式,但我不知道如何实现这一目标.
private SelectList GetStatusSelectList(int selectedStatusId)
{
List<MemberStatus> statusList = _memberStatusRepository.All().ToList();
statusList.Insert(0, new MemberStatus {StatusId = 0, Name = "All"});
var statusSelectList = new SelectList(statusList, "StatusId", "Name", selectedStatusId);
return statusSelectList;
}
private SelectList GetTeamSelectList(int selectedTeamId)
{
List<MemberTeam> teamList = _memberTeamRepository.All().ToList();
teamList.Insert(0, new MemberTeam { TeamId = 0, Name = "All" });
var teamSelectList = new SelectList(teamList, "TeamId", "Name", selectedTeamId);
return teamSelectList;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助弄清楚如何将这些重构为一个方法?
使用SQL Server 2008,我试图弄清楚如何创建一个返回带有标准多对多关系的数据透视表的查询.此关系定义哪些用户属于哪些角色,我希望该表列出侧面的用户名和顶部的角色名称.最终目标是在SQL Server Reporting Services中使用此输出,因此SQL Server是否生成透视结果无关紧要,或者SSRS是否生成结果(一种方法比另一种更好?).这是我的示例架构:
用户表:
权利表:
RightsMembership表:
我希望以下输出作为SSRS中的报告.任何帮助表示赞赏.
RightOne RightTwo RightThree RightFour
jdoe X X
mjane X X
ssmith X X X
Run Code Online (Sandbox Code Playgroud)
仅供参考:可以添加角色,因此我不希望在查询中对角色名称或计数进行硬编码.
我有以下代码检查远程计算机上的服务的状态.问题是,如果找不到远程计算机(它已关闭或其他东西),则该ManagementObjectSearcher.Get()方法需要20秒才能抛出"RPC服务器不可用"错误.在服务器不可用的情况下,我想明确声明我只希望它在短时间内尝试(例如3秒).我在这里发布了帖子,但它声明在ManagementObjectSearcher上使用Timeout选项,但我的代码似乎忽略了该值(因为它表明它与集合无关).我有什么东西可以忽略这些选项吗?我尝试过使用该ReturnImmediatly物业也无济于事.
public static void WmiServiceCheck()
{
try
{
var computerName = "SomeInvalidComputer";
var serviceName = "Power";
var managementScope = new ManagementScope(string.Format(@"\\{0}\root\cimv2", computerName));
var objectQuery = new ObjectQuery(string.Format("SELECT * FROM Win32_Service WHERE Name = '{0}'", serviceName));
var searcher = new ManagementObjectSearcher(managementScope, objectQuery);
searcher.Options.Timeout = new TimeSpan(0, 0, 0, 3); // Timeout of 3 seconds
var managementObjectCollection = searcher.Get();
var serviceState = managementObjectCollection.Cast<ManagementObject>().ToList().Single()["State"].ToString();
/// Other stuff here
}
catch (Exception ex)
{
}
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一个MVC 3应用程序,我正在尝试实现自己的自定义成员资格提供程序(遵循Apress'Pro ASP.NET MVC 3 Framework中的示例).
我创建了我的自定义类,继承自MembershipProvider并且(使用ReSharper)使用NotImplementedExceptions实现了所有27个方法.
现在,我已经覆盖了书中所述的ValidateUser方法并且它工作正常,但我想使我的提供者更强大并实现其他方法(例如,设置MinRequiredPasswordLength和GetNumberOfUsersOnline).
是否有一些示例代码可以用来开始填充这些我可以调整以适合我自己的DB/Model模式的方法?
我当然可以使用反复试验来解决问题,但基本代码示例会有很大帮助.
编辑: 这个问题只是两次投票.如果您要进行投票,请发表评论,说明为什么我可以努力改进我的问题.
编辑2: 例如,对于以下方法:
public override int GetNumberOfUsersOnline()
{
throw new System.NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)
我可以尝试从头开始编写代码来查看一些Web日志,确定用户登录时间和近似值,如果它们仍处于打开状态,但这需要花费大量时间让我弄明白.由于所有这些代码都来自Microsoft为标准SqlMembershipProvider编写的相同接口,因此不存在包含此方法的代码(甚至来自MS)吗?如果是这样,我想要它,修改它,以便它使用我的数据库模式而不是aspnetdb默认模式.我更愿意使用某种基本代码.我认为这将是一个简单而相当标准的要求,但也许不是.
在C#中,我试图将"值"添加到接受枚举标志的参数中.我可以在一行上使用按位运算符"|",但我似乎无法在循环中追加参数.
我将以下Enum指定为Flags.
[Flags]
public enum ProtectionOptions
{
NoPrevention = 0,
PreventEverything = 1,
PreventCopying = 2,
PreventPrinting = 4,
PrintOnlyLowResolution = 8
}
Run Code Online (Sandbox Code Playgroud)
现在,我可以轻松地使用以下代码向参数添加标志值:
myObj.Protection = ProtectionOptions.PreventEverything | ProtectionOptions.PrintOnlyLowResolution;
Run Code Online (Sandbox Code Playgroud)
但是,我想要做的,就是通过它们获得的从CSV字符串(从web.config)保护选项,循环列表,并将它们添加到我的myObj.ProtectionOptions财产.我不知道如何在循环中执行此操作而不使用按位OR"|" 运营商.这是我想要做的:
string protectionOptionsString = "NoPrevention, PreventPrinting";
string[] protectionOptions = protectionOptionsString.Split(',');
foreach (string protectionOption in protectionOptions)
{
myObj.Protection += (ProtectionOptions) Enum.Parse(typeof (ProtectionOptions), protectionOption.Trim());
}
Run Code Online (Sandbox Code Playgroud)
从概念上讲,这就是我想要的,但我不能"+ ="循环中的值到参数.
在使用第三方JQuery插件的MVC3应用程序中使用SquishIt时,我遇到了大量错误.在我的开发机器上,如果我在Bundle命令上设置ForceDebug方法,一切正常,JS正常处理.但是,如果我设置ForceRelease方法(在推出到生产之前进行测试),当我启动网站时,FireFox会显示"不是函数"错误.我尝试compilation debug="true"在web.config中设置没有任何改进.
以下是我的_layout.cshtml文件中的JS调用.所有捆绑都适用于标准JQuery插件:
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js"></script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery-ui-1.8.18.custom.min.js")"></script>
@(Bundle.JavaScript()
.Add("~/Scripts/modernizr-2.5.3.js")
.Add("~/Scripts/jquery.fileinput.js")
.Add("~/Scripts/jquery.numeric.js")
.Add("~/Scripts/jquery.maskedinput-1.3.min.js")
.Add("~/Scripts/jquery.maxlength_countdown.js")
.Add("~/Scripts/jquery.qtip.min.js")
.Add("~/Scripts/jquery.pnotify-1.1.0.min.js")
.Add("~/Scripts/fileuploader.js")
.Add("~/Scripts/jquery.dropdownchecklist-1.4.js")
.Add("~/Scripts/jquery.blockUI.js")
.Add("~/Scripts/jquery.textarearesizer.min.js")
.ForceRelease()
.MvcRender("~/CompiledContent/combined_#.js")
)
Run Code Online (Sandbox Code Playgroud)
以下是FireFox显示的错误示例.这会根据我在捆绑包中的内容而改变:
function (n) {var i = (n.browser.msie ? "paste" : "input") + ".mask", t = window.orientation != undefined;n.mask = {definitions: {9: "[0-9]", a: "[A-Za-z]", '*': "[A-Za-z0-9]"}, dataName: "rawMaskFn"}, n.fn.extend({caret: function (n, t) {if (this.length != 0) {if (typeof n == "number") {return t = …
在MVC3中,我想通过Html.ListBoxFor方法更改HTML输出,以便代替包含所有可用值的HTML列表框(以及突出显示的选定值),我想简单地输出无序列表(UL,LI)所选项目而不是SELECT元素.问题是我希望保持与ListBoxFor方法完全相同的方法签名,接受MultiSelectList对象和List,它是选定的值.然后,我希望无序列表仅输出所选项目值(而不是键)作为UL/LI html.这是我想要的方法签名.如何实现这一目标?
public static MvcHtmlString ListBoxForAsUnorderedList <TModel, TProperty>
(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
IEnumerable<SelectListItem> selectList)
Run Code Online (Sandbox Code Playgroud) 使用C#4.5我需要能够接受多种字符串格式的日期,并且需要能够将它们全部解析为有效日期.例子包括:
04-2014
April, 2014
April,2014
Run Code Online (Sandbox Code Playgroud)
我已经提出了以下代码,允许我配置一个字典,其中包含所有可能的格式及其代表性的RegEx格式和.NET等效格式DateTime.ParseExact.这个解决方案有效...然而,有很多foreach和if块,我只是想知道是否有更优雅/干净/更快的解决方案.
DateTime actualDate;
var dateFormats = new Dictionary<string, string> { { @"\d{2}-\d{4}", "MM-yyyy" }, { @"(\w)+,\s\d{4}", "MMMM, yyyy" }, { @"(\w)+,\d{4}", "MMMM,yyyy" } };
var dateValues = new[] { "04-2014", "April, 2014", "April,2014", "Invalid Date" };
var successfulDateParse = false;
foreach (var dateValue in dateValues)
{
foreach (var dateFormat in dateFormats)
{
var regex = new Regex(dateFormat.Key);
var match = regex.Match(dateValue);
if (match.Success)
{
actualDate = DateTime.ParseExact(match.Value, dateFormat.Value, CultureInfo.InvariantCulture); …Run Code Online (Sandbox Code Playgroud) 假设我需要找出下一个计划日期是什么时候,我知道该计划是基于 2014 年 8 月 1 日的开始日期,它应该每 7 天运行一次,当前日期是 2014 年 8 月 10 日。我应该得到 2014 年 8 月 14 日的日期。我最终想让这段代码每隔 X 小时、几天和几周工作一次,但现在我只是用几天进行测试。我有以下代码用于计算下一次运行时间,但我让它在一个日期工作,然后在另一个日期失败。仅供参考,我使用该选项来指定当前日期以进行测试。我究竟做错了什么?
public class ScheduleComputer
{
public DateTime GetNextRunTime(ScheduleRequest request)
{
var daysSinceBase = ((int)((request.CurrentDate - request.BaseDate).TotalDays)) + 1;
var partialIntervalsSinceBaseDate = daysSinceBase % request.Interval;
var fullIntervalsSinceBaseDate = daysSinceBase / request.Interval;
var daysToNextRun = 0;
if (partialIntervalsSinceBaseDate > 0)
{
daysToNextRun = (request.Interval - partialIntervalsSinceBaseDate) + 1;
}
var nextRunDate = request.BaseDate.AddDays((fullIntervalsSinceBaseDate * request.Interval) + daysToNextRun - 1);
return …Run Code Online (Sandbox Code Playgroud) 使用Orchard 1.5(据说已经内置了对面包屑的支持)我对如何在特定页面添加面包屑感到困惑.例如,我有一个Bio的页面.我想在页面顶部添加一个面包屑,如下所示:
首页>简介> John Doe
我是从"Bios"内容类型,左侧导航选项还是在哪里进行的?
我有一个简单的.net 4.5 webforms项目,我用它来输出一些服务检查的结果.我已经创建了一个多线程和等待的服务检查类(每次检查可能需要1-3秒,我希望它们并行检查).我希望每个服务检查的结果都写入网页并在确定后立即刷新(我不关心结果是否有序).服务检查程序方法已经过测试,在控制台应用程序中运行良好,但我无法将其移植到webforms应用程序.
下面的代码有点工作(非常随机).有时,它是完美的.其他时候,它会"跳过"显示其中一个测试的结果.其他时候,它将CSS样式的显示与结果混合在一起!但是,大多数情况下,它在CheckService中的Response.Flush行崩溃,说明"重叠的I/O操作正在进行中",然后崩溃.
如何在每次检查完成时编写网页响应缓冲区并以稳定的方式显示其结果?
这是aspx页面的代码......
<%@ Page Language="C#" Async="true" AutoEventWireup="true" Inherits="ServiceMonitor._Default" Codebehind="Default.aspx.cs" %>
Run Code Online (Sandbox Code Playgroud)
这是背后的代码......
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("<style type=\"text/css\">body {font-family: Arial;font-size: 10pt;}</style>");
Response.Write("Beginning processing...<br/>");
Response.Flush();
RegisterAsyncTask(new PageAsyncTask(CheckServices));
}
protected async Task CheckServices()
{
Response.Write(string.Format("Starting checks at {0}<br/>", DateTime.Now.ToLongTimeString()));
var tasks = new List<Task<ServiceStatus>>
{
Task.Run(() => CheckService("ServiceOne")),
Task.Run(() => CheckService("ServiceTwo")),
Task.Run(() => CheckService("ServiceThree"))
};
var checkResults = (await Task.WhenAll(tasks)).ToList();
Response.Write(string.Format("Checking complete at {0}<br/>", DateTime.Now.ToLongTimeString()));
Response.Flush();
}
public ServiceStatus …Run Code Online (Sandbox Code Playgroud) c# ×7
asp.net-mvc ×2
datetime ×2
asp.net ×1
async-await ×1
c#-4.0 ×1
enum-flags ×1
html-helper ×1
math ×1
orchardcms ×1
pivot-table ×1
refactoring ×1
reflection ×1
regex ×1
selectlist ×1
sql-server ×1
squishit ×1
timeout ×1
webforms ×1
wmi ×1