在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项目中,在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是什么.
有关如何做到这一点的任何建议?或者,如果我完全走错了轨道,有没有更好的方法呢?
我正在尝试创建一个自动站点地图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) 我正在尝试构建几个Windows服务来做不同的事情.例如,我需要Windows服务,它将:
我需要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运行两个服务,我有什么遗漏吗?
我正在创建一个具有用户概念的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中开发的应用程序.
我目前正在使用资源文件来存储我向用户呈现的消息(即,当我将某些内容保存到数据库时,并且向用户显示消息"正确保存的内容",该文本存储在资源文件中,因此我可以轻松地将消息本地化为另一种语言.
我的问题是如何在一个整体的视图中做到这一点?现在,我有一些视图,主要是HTML,只有少量的表示逻辑.
本地化视图的最佳做法是什么?我看过这里:
这篇文章中的方法似乎是一种有趣的方式,但我想知道为每种语言维护单独的视图是多么容易.
注意:我一般没有在asp.net中做过太多的全球化或本地化,所以可能有一些我失踪的非mvc世界的最佳实践.
我正在使用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,因此不会执行任何操作. …
我正在尝试使用带有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) 我试图使用NServiceBus与ASP.NET MVC 2网站(使用VS 2010和.NET 4.0框架).但是,当我在本地计算机上运行该站点时,出现以下错误:
无法加载一个或多个请求的类型.检索LoaderExceptions属性以获取更多信息.
以下是我采取的相关步骤:
Run Code Online (Sandbox Code Playgroud)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)<MsmqTransportConfig InputQueue="MyWebClient" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/> <UnicastBusConfig> <MessageEndpointMappings> <add Messages="Messages" Endpoint="MyServerInputQueue"/> </MessageEndpointMappings> </UnicastBusConfig>
该错误表明问题出在Global.asax.cs文件的第一行.NS 4.0是否可能在.NET 4.0下运行NServiceBus?
asp.net-mvc ×8
.net ×1
.net-4.0 ×1
c# ×1
json ×1
linq ×1
linq-to-sql ×1
nservicebus ×1
windows ×1