小编dp.*_*dp.的帖子

在ASP.NET MVC Html.ActionLink中包含锚标记

在ASP.NET MVC中,我正在尝试创建一个包含锚标记的链接(即,将用户指向页面,以及页面的特定部分).

我尝试创建的URL应如下所示:

<a href="/category/subcategory/1#section12">Title for a section on the page</a>
Run Code Online (Sandbox Code Playgroud)

我的路由设置符合标准:

routes.MapRoute("Default", "{controller}/{action}/{categoryid}"); 
Run Code Online (Sandbox Code Playgroud)

我正在使用的操作链接语法是:

<%foreach (Category parent in ViewData.Model) { %>
<h3><%=parent.Name %></h3>
<ul>
<%foreach (Category child in parent.SubCategories) { %>
    <li><%=Html.ActionLink<CategoryController>(x => x.Subcategory(parent.ID), child.Name) %></li>
<%} %>
</ul>
<%} %>
Run Code Online (Sandbox Code Playgroud)

我的控制器方法如下:

public ActionResult Subcategory(int categoryID)
{
   //return itemList

   return View(itemList);
}
Run Code Online (Sandbox Code Playgroud)

以上正确返回URL如下:

<a href="/category/subcategory/1">Title for a section on the page</a>
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何添加#section12部分."section"一词只是我用来分解页面部分的约定,而12是子类别的ID,即child.ID.

我怎样才能做到这一点?

asp.net-mvc

150
推荐指数
4
解决办法
13万
查看次数

将"active"标记添加到asp.net mvc母版页的导航列表中

在默认的asp.net mvc项目中,在Site.Master文件中,有一个菜单导航列表:

<div id="menucontainer">
    <ul id="menu">              
        <li><%= Html.ActionLink("Home", "Index", "Home")%></li>
        <li><%= Html.ActionLink("About Us", "About", "Home")%></li>
    </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

这将在浏览器中呈现:

<div id="menucontainer"> 
    <ul id="menu">              
        <li><a href="/">Home</a></li> 
        <li><a href="/Home/About">About Us</a></li> 
    </ul> 
</div> 
Run Code Online (Sandbox Code Playgroud)

我希望能够根据被调用的视图动态设置活动列表项.也就是说,当用户查看主页时,我希望创建以下HTML:

<div id="menucontainer"> 
    <ul id="menu">              
        <li class="active"><a href="/">Home</a></li> 
        <li><a href="/Home/About">About Us</a></li> 
    </ul> 
</div> 
Run Code Online (Sandbox Code Playgroud)

我希望这样做的方式如下:

<div id="menucontainer">
    <ul id="menu">              
        <li <% if(actionName == "Index"){%> class="active"<%}%>><%= Html.ActionLink("Home", "Index", "Home")%></li>
        <li <% if(actionName == "About"){%> class="active"<%}%>><%= Html.ActionLink("About Us", "About", "Home")%></li>
    </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

这里的关键位是<% if(actionName == "Index"){%> class="active"<%}%>线.我不知道如何确定当前actionName是什么.

有关如何做到这一点的任何建议?或者,如果我完全走错了轨道,有没有更好的方法呢?

asp.net-mvc

35
推荐指数
7
解决办法
3万
查看次数

ASP.NET MVC中的动态站点地图

我正在尝试创建一个自动站点地图ActionResult,它输出一个有效的sitemap.xml文件.实际生成的文件不是问题,但我似乎无法弄清楚如何填充系统中的URL列表.这是我到目前为止的代码:

    public ContentResult Sitemap()
    {
        XNamespace xmlns = "http://www.sitemaps.org/schemas/sitemap/0.9";
        XElement root = new XElement(xmlns + "urlset");

        //some kind of foreach here to get the loc variable for all URLs in the site
        //for each URL in the collection, add it to the root element as here

        //root.Add(
        //    new XElement("url", 
        //        new XElement("loc", "http://google.com"), 
        //        new XElement("changefreq", "daily")));

        using (MemoryStream ms = new MemoryStream())
        {
            using (StreamWriter writer = new StreamWriter(ms, Encoding.UTF8))
            {
                root.Save(writer);
            }

            return Content(Encoding.UTF8.GetString(ms.ToArray()), "text/xml", Encoding.UTF8);
        } …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc

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

一个exe中的多个Windows服务

我正在尝试构建几个Windows服务来做不同的事情.例如,我需要Windows服务,它将:

  1. 通过电子邮件发送每日报告
  2. 每30分钟定期清理一些存档信息
  3. 等等

我需要Windows服务的任务是不同的,所以我不喜欢将它们全部集中在一个服务中的想法.

到目前为止我所拥有的是Visual Studio 2008中的一个项目.我已经创建了一个Windows服务,我在OnStart事件上设置了一个计时器(它只是为了测试目的每5秒写一个文本文件).然后我向项目添加了一个安装程序,当我运行InstallUtil.exe时,一切正常.

当我向同一个项目添加第二个Windows服务时,问题就出现了.我再次设置OnStart代码,使用相同的日志信息(略有不同,以便我可以判断哪个服务正在写入日志).使用第二个Windows服务,我在Program.cs中更改了Main事件:

    static void Main(string[] args)
    {
        ServiceBase[] ServicesToRun = new ServiceBase[] 
        { 
            new Service1()
        };

        ServiceBase.Run(ServicesToRun);
    }
Run Code Online (Sandbox Code Playgroud)

至:

    static void Main(string[] args)
    {
        ServiceBase[] ServicesToRun = new ServiceBase[] 
        { 
            new Service1(),
            new Service2()
        };

        ServiceBase.Run(ServicesToRun);
    }
Run Code Online (Sandbox Code Playgroud)

此时,没有编译时错误,但Service2服务从不做任何事情......日志记录任务永远不会触发.

我把它缩小到第二个服务没有与之关联的"安装程序"的事实.然后,我尝试按照第一项服务的方式添加安装程序(即,右键单击服务设计器,然后单击"添加安装程序").现在,当我转到ProjectInstaller.cs文件时,那里有另一个serviceInstaller(serviceInstaller2).

现在当我构建项目并尝试安装服务时,我转到"服务"控制面板窗口,我尝试启动Service1,收到以下错误消息:

Windows无法在本地计算机上启动Service1服务.

错误1083:此服务配置为运行的可执行程序未实现该服务.

如果我尝试启动Service2,则会收到相同的错误消息(当然,错误消息标识Service2除外).

为了从一个exe运行两个服务,我有什么遗漏吗?

c# windows windows-services

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

使用角色的asp.net mvc授权

我正在创建一个具有用户概念的asp.net mvc应用程序.每个用户都可以编辑自己的个人资料.例如:

没有什么特别令人兴奋的......

但是,我在授权方案中遇到了一些麻烦.现在系统中只有两个角色,"管理员"和"默认用户",但将来可能会有更多.

我无法使用常规Authorize属性来指定授权,因为两个用户都处于相同的角色(即"DefaultUser").

所以,如果我像这样指定授权过滤器:

[Authorize(Roles = "DefaultUser")]
Run Code Online (Sandbox Code Playgroud)

那就没有效果了.PersonID = 1可以进入并编辑自己的配置文件(因为它们应该可以),但是他们也可以将URL更改为http:// localhost/person/edit/2,并且他们具有编辑PersonID = 2的完全访问权限.配置文件(他们不应该这样做).

这是否意味着我必须创建自己的授权过滤器,在允许用户访问之前检查用户请求的操作是否"属于"他们?也就是说,如果当前登录的人正在请求参数= 1的编辑操作,是否需要进行自定义检查以确保当前登录的人员是PersonID = 1,如果是,则授权他们,如果没有,拒绝访问?

感觉我在这里遗漏了一些明显的东西,所以任何指导都会受到赞赏.

asp.net-mvc authorization

24
推荐指数
4
解决办法
4万
查看次数

ASP.NET MVC视图全球化

我正在寻找全球化我在asp.net mvc中开发的应用程序.

我目前正在使用资源文件来存储我向用户呈现的消息(即,当我将某些内容保存到数据库时,并且向用户显示消息"正确保存的内容",该文本存储在资源文件中,因此我可以轻松地将消息本地化为另一种语言.

我的问题是如何在一个整体的视图中做到这一点?现在,我有一些视图,主要是HTML,只有少量的表示逻辑.

本地化视图的最佳做法是什么?我看过这里:

这篇文章中的方法似乎是一种有趣的方式,但我想知道为每种语言维护单独的视图是多么容易.

注意:我一般没有在asp.net中做过太多的全球化或本地化,所以可能有一些我失踪的非mvc世界的最佳实践.

.net globalization asp.net-mvc

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

Linq to SQL更新无法使用Repository模式

我正在使用asp.net mvc作为应用程序.我从Rob Conery的MVC店面系列中获得了一些指导.我使用的是与他在店面中使用的模式非常相似的数据访问模式.

但是,我在模式中添加了一个小的差异.我在模型中创建的每个类都有一个名为IsNew的属性.这样做的目的是允许我指定是否应该在数据库中插入或更新.

这是一些代码:

在我的控制器中:

OrderService orderService = new OrderService();
Order dbOrder = orderService.GetOrder(ID);

if (ModelState.IsValid)
{
    dbOrder.SomeField1 = "Whatever1";
    dbOrder.SomeField2 = "Whatever2";
    dbOrder.DateModified = DateTime.Now;
    dbOrder.IsNew = false;

    orderService.SaveOrder(dbOrder);
}
Run Code Online (Sandbox Code Playgroud)

然后在SQLOrderRepository中:

public void SaveOrder(Order order)
{
    ORDER dbOrder = new ORDER();

    dbOrder.O_ID = order.ID;
    dbOrder.O_SomeField1 = order.SomeField1;
    dbOrder.O_SomeField2 = order.SomeField2;
    dbOrder.O_DateCreated = order.DateCreated;
    dbOrder.O_DateModified = order.DateModified;

    if (order.IsNew)
        db.ORDERs.InsertOnSubmit(dbOrder);

    db.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)

如果我更改控制器代码,以便dbOrder.IsNew = true; 然后代码工作,并正确插入值.

但是,如果我设置dbOrder.IsNew = false; 没有任何反应......没有错误 - 它只是不更新​​订单.

我在这里使用DebuggerWriter:http://www.u2u.info/Blogs/Kris/Lists/Posts/Post.aspx?ID = 11来跟踪正在生成的SQL,并且正如预期的那样,当IsNew值为true时,Insert SQL生成并正确执行.但是,当IsNew设置为false时,似乎没有生成SQL,因此不会执行任何操作. …

linq asp.net-mvc linq-to-sql

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

ASP.NET MVC JsonResult和JQuery flot

我正在尝试使用带有asp.net mvc 的jquery flot graphing插件.我正在尝试从JsonResult动态提取数据以填充图形.

我的问题是我似乎无法以正确的格式从JsonResult返回数据.

这是我的服务器端代码:

    public ActionResult JsonValues()
    {
        IList<IDictionary<string, int>> listofvalues = new List<IDictionary<string, int>>();
        IDictionary<string, int> values1 = new Dictionary<string, int>();
        values1.Add("2003", 10882);
        values1.Add("2002", 10383);
        values1.Add("2001", 10020);
        values1.Add("2000", 9762);
        values1.Add("1999", 9213);
        values1.Add("1998", 8720);

        IDictionary<string, int> values3 = new Dictionary<string, int>();
        values3.Add("2003", 599);
        values3.Add("2002", 510);
        values3.Add("2001", 479);
        values3.Add("2000", 457);
        values3.Add("1999", 447);
        values3.Add("1998", 414);

        listofvalues.Add(values1);
        listofvalues.Add(values3);

        JsonResult result = new JsonResult { Data = listofvalues };
        return result;
    }
Run Code Online (Sandbox Code Playgroud)

这是我的客户端代码:

    $(function() {
        $.getJSON("/path/to/JsonValues", function(data) {
            var …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc json jquery-plugins

5
推荐指数
3
解决办法
5228
查看次数

带有NServiceBus的ASP.NET MVC 2无法加载请求的类型

我试图使用NServiceBus与ASP.NET MVC 2网站(使用VS 2010和.NET 4.0框架).但是,当我在本地计算机上运行该站点时,出现以下错误:

无法加载一个或多个请求的类型.检索LoaderExceptions属性以获取更多信息.

以下是我采取的相关步骤:

  • 下载了NServiceBus.2.0.0.1145二进制文件
  • 在我的asp.net mvc应用程序中,我添加了对NServiceBus.dll和NServiceBus.Core.dll的引用
  • 在Global.asax.cs中我添加了:
public static IBus Bus { get; private set; }
protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes);

    Bus = NServiceBus.Configure
        .WithWeb()
        .Log4Net()
        .DefaultBuilder()
        .XmlSerializer()
        .MsmqTransport()
            .IsTransactional(false)
            .PurgeOnStartup(false)
        .UnicastBus()
            .ImpersonateSender(false)
        .CreateBus()
        .Start();
}
Run Code Online (Sandbox Code Playgroud)
  • 在web.config中,我添加了:
<MsmqTransportConfig 
  InputQueue="MyWebClient" 
  ErrorQueue="error" 
  NumberOfWorkerThreads="1" 
  MaxRetries="5"/>

<UnicastBusConfig>
  <MessageEndpointMappings>
    <add Messages="Messages" Endpoint="MyServerInputQueue"/>
  </MessageEndpointMappings>
</UnicastBusConfig>
Run Code Online (Sandbox Code Playgroud)

该错误表明问题出在Global.asax.cs文件的第一行.NS 4.0是否可能在.NET 4.0下运行NServiceBus?

asp.net-mvc nservicebus .net-4.0

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