MVC :: Runtime Sitemap Construction For Each Index() ActionMethod - Custom Attribute?
Jun 21, 2010
Recently, I wrote code that dynamically builds a menu / navbar for my site that uses Reflection upon the [Authorize(Roles="")] attribute to determine what Controllers and ActionMethods should be shown to the user. And it came out really well. See this post for the details on how I did it: [URL]
The next step that I've been thinking about is when the user clicks on the "Controller" listing, it takes the user to the Index page. (eg. [URL] ) Which is perfectly fine, but I was thinking that it would be nice to also have this Index page for each controller dynamically constructed based on the user's roles / permissions. For example, if the Index page from XYZ-Controller might look like:
XYZ-Controller Index
SomeMethod1 -- This method tweaks your widgets
SomeMethod2 -- This method unwinds your widgets, re-orders thems, and then re-winds them, but only on Tuesdays.
SomeMethod3 -- This method will delete some or all of your widgets and then you'll be sad.
I currently use Reflection to iterate thru all my Controllers and all the ActionMethods in each controller. I've been pondering the best way to store the Description of each ActionMethod. (Like, "This method tweaks your widgets.") Do I make my own Attribute called, say, Description which I would use to decorate ActionMethods with. For example it might look like this: [Description("This method tweaks your widgets")]
I managed to dynamically add nodes to my sitemap at runtime, but the changes are not reflected in my menu (which is populating from the sitemap) unless I restart the application (restart the webserver). Is there a way to trigger the event of regenerating the sitemap, and thus triggering the menu to repopulate with the new nodes?
I was referred here by MSDN forums hope this is the right place - I have a custom control (:WebControl) that renders web.sitemap in a specific way. While it runs error free and produces the expected result, at Design-Time it complains
[Code]....
and have tried the SiteMapDataProvider Tag with and without the SiteMapProvider attribute.Does anybody have (a) any experience with this, or (b) any suggestions as to how to track down the problem?
This is allowing my application user to show up a different Site Map as and when the theme is changed.
But when I tried to do the same with the following code I faced with an issue.
configuration = WebConfigurationManager.OpenWebConfiguration("~") section = CType(configuration.GetSection("system.web/siteMap"), SiteMapSection) Dim provider As New ProviderSettings() If Not section Is Nothing Then provider.Name = txtError.Text provider.Type = "System.Web.XmlSiteMapProvider" section.Providers.Add(provider) configuration.Save() End If
This code is not allowing a provider.siteMapFile property (provideer is the ProviderSettings object). As well the maximum possible way I can add a new SiteMap provider in web.config is as follows
I'm basically trying to get a div containing a loading gif to show on my page at runtime. I call it from a button click event as well as in the code flow. It was working before I used the AJAX Update Panels. I've since taken them out as they were causing issues with RegisterClientScriptBlock. By the way, does commenting out the AJAX Markup like this...
I'm building a custom web control with a public property which I only want to be available in design time (i.e. make it unavailable in code behind). The DesignOnly attribute promises to do just that, but when I set [DesignOnly(true)] it has no noticeable effect whatsoever:
[Bindable(true)] [Category("Appearance")] [DefaultValue(null)] [Localizable(false)] [DesignOnly(true)] public string MyProp { get { return ViewState["MyProp"] as string; } set { ViewState["MyProp"] = value; } }
The property still appears in code behind IntelliSense. Setting a value to it in code behind works. In these respects, the behavior is just as if the attribute had never been set. And I've cleaned and rebuilt the complete solution. Twice.
I have a footer that I am adding to a masterpage. Within this footer, if constructs menus based on the Current Node of the sitemap, however the sitemap is coming back as null. how to fix this issue.
I'm only a newcomer to ASP.NET MVC and am not sure how to achieve a certain task the "right way".
Essentially, I store the logged in userId in HttpContext.User.Identity and have written an EnhancedAuthorizeAttribute to perform some custom authorization.
In the overriden OnAuthorization method, my domain model hits the database to ensure the current user id can access the passed in routeValue "BatchCode". The prototype is:
It will return null if the user can't access the ReviewGroup and the OnAuthorization then denies access.
Now, I know the decorated action method will only get executed if OnAuthorization passes, but I don't want to hit the database a second time to get the ReviewGroup again.
I am thinking of storing the ReviewGroup in HttpContext.Items["reviewGroup"] and accessing this from the controller at the moment.
I have seen a lot of examples posted on how to create a Custom SiteMap Provider which is directly linked to the Business Logic in the Presentation Layer, however, I would like to write a Custom SiteMap Provider which inherits from StaticSiteMapProvider and is driven by the database. In addition, I would like to expose all of this logic behind WCF Services.
Are there any samples on how to implement a Custom SiteMap Provider over WCF Services since I am having a hard time trying to figure out exactly how to put a solution following this architectural pattern together.
http://localhost/i have windows 2003 enterprise on which i have installed IIS and aspnet_regiis -ii have configured a web application thr' IIS virtual directorybut when i type http://localhost/ iget Under ConstructionThe site you are trying to view does not currently have a default page. It may be in the process of being upgraded and configured.Please try this site again later. If you still experience the problem, try contacting the Web site administrator.If you are the Web site administrator and feel you have received this message in error, please see "Enabling and Disabling Dynamic Content" in IIS Help.lick Start, and then click Run. In the Open text box, type inetmgr. IIS Manager appears. From the Help menu, click Help Topics. Click Internet Information Services.whts wrong . is IIS proper . my web sit eis not getting displayed. its just says LOADIng and nothing comes
I'm trying to get the current action method by this way.
ActionDescriptor actionDescriptor = filterContext.ActionDescriptor; string actionName = actionDescriptor.ActionName; var controllerType = filterContext.Controller.GetType(); var actionMethod = controllerType.GetMethod(actionName);
But if there're two action method with the same name, the AmbiguousMatchException will occur there. Without the ActionMethod property, how can I get the current action method now?
Supposing I have a user control like this <MyTag:MyWidget runat="server" /> I am wondering if I can do something like <MyTag:MyWidget runat="server" MemberHeight="400" PublicHeight="200" /> So that in MyWidget.ascx I can have <div height="<%=IsLoggedIn ? MemberHeight : PublicHeight%>"> or something like that...? Because I want the height to vary in each page that is using this widget.
I want to create a single custom authorization attribute to be added to controller actions that require authenticated users.
My first shot at this, so I may have it all wrong
Got 3 Roles which corresponds to 3 Areas in my application (Client app, so I'll just call them RoleOne, RoleTwo, RoleThree and AreaOne, AreaTwo, AreaThree).
Each area have similiar (to a point) views and actions, like Sign Up, Area specific home, etc.
In the attribute I want to determine the current area, controller and action. Then I just add code like:
If not logged in, and in AreaOne, go to AreaOne Signup (etc)If logged in as RoleOne, and AreaOne Home is requested, go there, but if AreaTwo Home is requested ,go to AreaTwo Signup So in my attribute class I need to determine the current area, controller and action, and see what kind of user we have logged in (if any)
Using ActionExecutingContext it seems I can determine the contoller and action method names, however I cannot find the Area name, and altered the attribute to be called like this:
Is it possible to access a parent class from within an attribute.
For example I would like to create a DropDownListAttribute which can be applied to a property of a viewmodel class in MVC and then create a drop down list from an editor template. I am following a similar line as Kazi Manzur Rashid here.
He adds the collection of categories into viewdata and retrieves them using the key supplied to the attribute.
I would like to do something like the below,
public ExampleDropDownViewModel { public IEnumerable<SelectListItem> Categories {get;set;} [DropDownList("Categories")] public int CategoryID { get;set; } }
The attribute takes the name of the property containing the collection to bind to. I can't figure out how to access a property on the parent class of the attribute. Does anyone know how to do this?
I've create a custom attribute for my web pages... In the base page class I've created I'm trying to pull if that attribute has been set. Unfortunately it does not come back as part of the GetCustomAttributes function. Only if I explicitly use the typeof(myclass) to create the class. I have a feeling it's due to how asp.net classes are generated.
I have some code which is rendering some custom attributes of Hidden Control (without runat=server).
Something like,
And I have a lot of these hidden elements on my form.
When I submit the form, I am looping through a set of ids, say 1200 to 1250, so I will read controls based on that, and also hidden with Request.Form["hdn "]
Now problem is, as we know we get value attribute from form when we do Request.Form["id"] for hidden, I want to read my custom attributes from hidden element. Is there any way? Note that, I can not touch the rendering part here.
To enable the details of this specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off".
I got this error at time of running ma published website but only for 1page this error occurred how it can be solved.
The attribute is not rendered to the client, even when the custom namespace is declared in the html element like: <html xmlns= [URL] Does anyone know of a way to get this to render to the client, without having to use a custom control. A module or other globally "pluggable" solution would be acceptable.