小编Jef*_*eff的帖子

动作过滤器中的会话变量

我有一个动作过滤器检查是否ID设置了会话变量.出于开发目的,我在检查之前手动设置了此变量.

public class MyActionFilterAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext context)
        {

            context.HttpContext.Session.Add("ID", 123123);

            int ID = (int)context.HttpContext.Session.Contents["ID"];
            var rd = context.HttpContext.Request.RequestContext.RouteData;

            TED _db = new TED();

            //if not in DB
            if (_db.Users.Find(ID) == null && rd.GetRequiredString("action") != "NoAccess")
            {
                RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
                redirectTargetDictionary.Add("action", "NoAccess");
                redirectTargetDictionary.Add("controller", "Home");
                redirectTargetDictionary.Add("area", "");

                context.Result = new RedirectToRouteResult(redirectTargetDictionary);
            }

            base.OnActionExecuted(context);
        }
    }
Run Code Online (Sandbox Code Playgroud)

据我所知,此代码在任何页面之前运行,Session["ID"]始终设置.如果我一直在测试,该网站工作正常,但如果我离开它一段时间似乎打破,然后尝试继续测试.这是我得到的错误:

int UserID = (int)Session.Contents["ID"];
System.NullReferenceException: Object reference not set to an instance of an object. …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

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

基于另一个表中的复合键删除

我一直不愿意发布这个,因为我觉得这是一个常见的问题,但我似乎无法找到适用于这种情况的答案......(也许我只是一个非常糟糕的Google员工).

我有两个相同的表(列方式,而不是数据),table1和table2.我希望删除table1中的记录,其中两个表中都存在复合键(col1,col2).这就是我所拥有的,这似乎对我来说是正确的,但却是一个错误.

DELETE FROM Table1
WHERE (**Col1**, Col2) IN
(SELECT Col1, Col2
FROM Table1 a
JOIN Table2 b
    ON a.Col1 = b.Col1
    AND a.Col2 = b.Col2)
Run Code Online (Sandbox Code Playgroud)

错误:

消息4145,级别15,状态1,行212在期望条件的上下文中指定的非布尔类型的表达式,在','附近.

我把两个*代码部分放在了"Red error squiggles"的旁边.

sql t-sql sql-server

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

将C#对象列表转换为JavaScript对象数组

我正在使用jQueryUI的自动完成功能来搜索用户.文档说明我能够以下列格式使用数组作为数据源:[ { label: "Choice1", value: "value1" }, ... ]

我有一个基类,它提供了Users我的视图模型继承的唯一列表.视图模型具有以下功能:

public List<TestJson> GetUsers()
{
    return AvailableUsers
        .Select(u => new TestJson
            {
                Label = u.LastName + ", " + u.FirstName + "(" + u.UserId + ")",
                Value = u.UserId
            }).ToList();
}

public class TestJson
{
    public string Label { set; get; }
    public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,我使用上面这样:

var userNameList = @Html.Raw(Json.Encode(Model.GetUsers()));

$("#UserName").autocomplete({
    source:userNameList 
});
Run Code Online (Sandbox Code Playgroud)

原来userNameList是这样出现的:

[ { "Label": "Choice1", "Value": …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc jquery jquery-ui

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

服务器端kendo分页与存储过程

我想使用[DataSourceRequest] DataSourceRequest request和实现服务器端分页/排序/等ToDataSourceResult

我已经使用LINQ和EF完成了数百次,但是,这个当前项目要求我们使用存储过程,称为 context.Database.SqlQuery

这工作正常,除了我需要将参数传递到存储过程的情况,这导致错误:

SqlParameter已包含在另一个SqlParameterCollection中.

我假设这样做的原因是剑道ToDataSourceResult还试图将SQL参数附加到dataC#不喜欢的对象上.

我在网上看到的一些解决方案是打电话.ToList(),这确实有效,然而,它有点失败,因为它仍然会查询所有结果.

var data = context.Database.SqlQuery<TicketVm>("usp_FleetRentedEquipments @analyst",
                                               new SqlParameter("@analyst", analyst));
return data.ToDataSourceResult(request);
Run Code Online (Sandbox Code Playgroud)

sql-server asp.net-mvc kendo-ui kendo-grid

10
推荐指数
1
解决办法
1037
查看次数

字符串连接与三元运算符

我正在创建SelectList各种联系人.我想证明是一个组合的文本FirstName,MiddleInit(如果可能的话),和LastName.

IEnumerable<SelectListItem> items = contacts
.Select(r => new SelectListItem()
{
    Value = r.ContactID.ToString(),
    Text = r.FirstName + " " 
    + string.IsNullOrEmpty(r.MiddleInit) ? r.MiddleInit + ". " : ""
    + r.LastName
});
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Error   4   Cannot implicitly convert type 'string' to 'bool'   C:\Users\cu551d\Documents\Visual Studio 2010\Projects\WVM\WVM\Controllers\SOWController.cs  181 15  WVM
Run Code Online (Sandbox Code Playgroud)

我猜这与我的语法有关.我能在c#中做这样的事吗?

另外,我应该在Trim()声明中加入声明MiddleInit吗?我认为这个错误非常奇怪IsNullOrEmpty,事实上回复一个bool.我也试过了(string.IsNullOrEmpty(r.MiddleInit) == true ) ..

c# asp.net-mvc

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

SelectList多年

这可能非常简单......我试图创建一个SelectList包含当前版本的年份,直到2008年.这将始终如此.例如,在2020年,我的SelectList将包含2020年至2008年的值.

我设置了这个循环,但我不确定这个最好的地方是什么

for (int i = currentYear; i != 2009; --i)
{

}
Run Code Online (Sandbox Code Playgroud)

是否可以创建单个SelectListItem并将其"添加"到SelectList每次迭代?

我不认为上面的陈述是可能的,所以我的下一个想法是创建一个年份列表,然后使用LINQ来创建它.

var selectList = ListOfYears.Select(new SelectListItem
{
    Value =
    Text = 
});
Run Code Online (Sandbox Code Playgroud)

但后来我不完全确定如何从列表中获取值.谢谢

c# asp.net-mvc-4

8
推荐指数
1
解决办法
6619
查看次数

计算不同行中不同列之间的差异

我有一张桌子记录了访问期间车辆发生的情况.对于每次访问,都有多行来表示已完成的操作.该表看起来像这样

VisitID | ActionID | StartTime | EndTime
   0    |    0     | 1/1/2013  | 1/2/2013
   1    |    0     | 1/2/2013  | 1/4/2013
   1    |    1     | 1/4/2013  | 1/7/2013
   2    |    0     | 1/4/2013  | 1/5/2013
   2    |    1     | 1/5/2013  | 1/6/2013
   2    |    2     | 1/6/2013  | 1/7/2013
Run Code Online (Sandbox Code Playgroud)

我希望构建一个能够获取访问时间的LINQ查询.TotalTime首先找到第一个和最后一个(最低和最高)ActionID,然后计算last.EndTime - first.StartTime.预期成绩:

VisitID | TotalTime
   0    |   1
   1    |   5
   2    |   3
Run Code Online (Sandbox Code Playgroud)

我可以通过这样做来产生我的预期结果

var first = db.Visits.Where(v => v.ActionID == 0) …
Run Code Online (Sandbox Code Playgroud)

c# linq

7
推荐指数
1
解决办法
968
查看次数

创建多个图表以及Chart,Series,ChartArea之间的关系

我已经使用MSChart生成图表一段时间了,但我从未在一个图表对象中创建多个图表.对这项任务的思考揭示了我的知识差距.

我如何看待创建图表

  1. 创建图表对象
  2. 将ChartArea对象添加到Chart对象
  3. 创建系列并添加数据
  4. 将系列添加到图表

对象结构最终看起来像这样

                 Chart
               /       \
          ChartArea   Series
Run Code Online (Sandbox Code Playgroud)

就我过去所关注的而言,ChartArea就是我设置标签的区域.要添加另一个,我将要添加另一个ChartArea和一个或多个系列.

           ___________________ Chart ___________________
          /                  /       \                  \
       ChartArea0      ChartArea1   Series0            Series1
Run Code Online (Sandbox Code Playgroud)

如何将Series0与ChartArea0相关联?将一个系列添加到ChartArea是有意义的,但这是不可能的.为什么将系列与图表相关联而不是ChartArea是有益的?

c# mschart

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

LINQ中的Concat/Union表

这个当前项目更像是一个更大项目的概念证明.我有两个"表"(表示为下面的列表),CatList并且DogList具有相同的列结构.我希望能够使用Concat或者Union对两者执行查询LINQ.有人告诉我,通过实施,interfaces我将能够实现这些结果.

这是我到目前为止:

        static void Main(string[] args)
    {
        System.Console.Write("Hello World\n");
        Dog Dog1 = new Dog { name = "A", age = 1 };
        Dog Dog2 = new Dog { name = "B", age = 2 };
        Cat Cat1 = new Cat { name = "C", age = 3 };
        Cat Cat2 = new Cat { name = "D", age = 4 };

        List<Dog> DogList = new List<Dog>();
        List<Cat> CatList …
Run Code Online (Sandbox Code Playgroud)

c# linq

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

具有嵌套模型类的Razor视图

我有一个嵌套类,如:

public class Jar
{
    public IEnumerable<NailClippings> Nails { set; get; }
    public IEnumerable<People> Donors { set; get; }
}
Run Code Online (Sandbox Code Playgroud)

我的控制器将单个传递Jar给我的视图,字符串键入为

@model Test.ViewModels.Jar
Run Code Online (Sandbox Code Playgroud)

我可以通过内容循环NailsDonors容易像这样的东西

@foreach(var item in Model.Nails)
Run Code Online (Sandbox Code Playgroud)

我的问题是使用HTML帮助程序为我生成显示名称

@Html.DisplayNameFor(model => model.Nails.Length)
Run Code Online (Sandbox Code Playgroud)

我通过更改内部嵌套类的类型来提出解决方案List,.ToList()在查询结束时附加并将行更改为

@Html.DisplayNameFor(model => model.Nails[0].Length)
Run Code Online (Sandbox Code Playgroud)

被迫使用List并有一个索引[0]来显示一个名字对我来说是愚蠢的.是否有另一种引用内部嵌套类属性的方法?

编辑:查看

<table>
    <tr>
        <th>@Html.DisplayNameFor(model => model.Nails[0].Length)</th>
        .
        .
    </tr>
    @foreach(var item in Model.Nails){
    <tr>
        <td>@Html.DisplayFor(modelItem => item.Length</td>
        .
        .
    </tr>
    }
</table>
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc razor

5
推荐指数
2
解决办法
6381
查看次数