MVC :: Trying To Use ActionLink With RouteValues And HtmlAttributes?
Nov 28, 2010I am trying to use ActionLink with routeValues & htmlAttributes
[Code]....
I am trying to use ActionLink with routeValues & htmlAttributes
[Code]....
Getting to grips with ASP.NET MVC. So far, so good, but this one is a little nuts. I have a view model that contains a dictionary of attributes for a hyperlink, used like this:
menu = model variable Html.ActionLink(Html.Encode(menu.Name), Html.Encode(menu.Action), Html.Encode(menu.Controller), menu.Attributes, null) The problem is the position of "menu.Attributes" expects an object in the form:
new { Name = "Fred", Age=24 }
From what I can tell, this anonymous object is actually converted to a dictionary via reflection anyway BUT you can't pass a dictionary to it in the first place!!!
The Html generated for the link simply shows the dictionary type. How on earth do I get round this? The whole point is that its general and the controller can have set the menu.Attributes previously....
Based on a post below I tried the following:
Html.ActionLink(Html.Encode(menu.Name), Html.Encode(menu.Action), Html.Encode(menu.Controller), new RouteValueDictionary(menu.Attributes), new Dictionary<string,object>())
but this still doesn't work (I guess the code internally calls the generic method that takes objects?). The above (and my original solution of passing a dictionary to the 4th paramater produces a HTML similar to this:[URL] i.e. it's using reflection and working things out completely wrong...
Don't understand htmlAttributes parameters? try this:
[Code]....
[Code]....
How to correct?
[Code]....
I'm having a problem understanding how to use TextBoxFor with a DateTime field (in particular how to add htmlAttributes). MVC has helpfully scaffolded the following for me:
[Code]....
I now want to add an htmlAttribute to this, to make the rendered <input> element read-only, for example:
new {@readonly="true"} The problem I have, is that the MSDN documentation for TextBoxFor (see [URL] says only allows two arguments are allowed, the LINQ expression, and a dictionary or object containing the htmlAttributes. So I have two questions:
1. What is the role of "String.Format("{0:g}", Model.LastPolled)" in the scaffolded version? This obviously works, but doesn't seem to be an htmlAttribute.
2. How should I modify the scaffolded version so that the readonly attribute will be used?
I've heard from a couple of different sources that when using HTML helpers in ASP.NET MVC2, one can create custom attributes with dashes in them (e.g. <a data-rowId="5">) by using an underscore in place of the dash, and when the HTML is written to the page the underscores will be replaced by dashes.
So, something like this:
<%= HtmlActionLink(Model.Name, "MyView", null, new {data_rowId = Model.id}) %>
should render as
<a data-rowId="0" href="myURL">Row Name</a>
But... it's not. I think that maybe this feature is only enabled in the MVC3 Beta preview (as it's mentioned in the MVC3 preview release notes), but this thread is about the same thing, and it's regarding MVC2.
I know I can use the other solution presented in that thread, but I'd rather not have to resort to using the dictionary if a more elegant solution exists.
MVC 1.0 source has code like
[Code]....
Was RouteValueDictionary intended for use with htmlAttributes? Is there an alternative? The only 'feature' RouteValueDictionary looks like its got is it has a constructor which accepts an object.
What should I be using in custom helpers?
I'm pretty new to ASP.Net / MVC 2. Can anyone explain how to use the Html.ActionLink thing? I understand that the first parameter is the displayed text, but for the second one, what is the action name?
View 1 RepliesI think this should be simple, but I can't find the option! How do I get a tooltip/alt for my ActionLink??
<%=Html.ActionLink("New", "List", "FormSummary", new {childId = Child.Id}, new {Class = "action add"})%>
I am trying to pass the value that a user enters into a html.Textboxfor to an html.Action link. As shown below :
<%=Html.TextBoxFor(m => m.OrderQty)%>
<p class="button" >
<%: Html.ActionLink("Add to cart",
"AddToCart",
"ShoppingCart",
new { id = Model.Product.ProductId, Qty = Model.OrderQty }, "")%>
</p>
But when i put a breakpoint in the AddToCart Qty is always 0 :-(
I have an ActionLink: <%: Html.ActionLink("MyAction", "MyAction") %> I would like to use a button instead. Something like this: <asp:Button ID="Button1" runat="server" Text="MyAction" /> What do I need to do to make clicking the button perform the same action as clicking the ActionLink?
View 1 RepliesI have a number of permissions, and based on a set of conditions these permission determine if a user can see certain features. I have written a helper function for this as the logic in the view became quite extensive.
Essentially I'm looking for a function the same as Html.ActionLink that I can access from a class file (Ideally if I can access the Helper that would be great) So I can do somthing like so,
public static string GetAdminLinks()
{
if(PermCheck)
{
return(Html.ActionLink(...));
}
}
I've a method associated with an actionlink in the asp.net mvc view. When user clicks on actionlink the method is being called twice before the user is redirected to an appropriate page. Following is the code.
Html.ActionLink(item.RecipientID,"EligibilityResponse","Eligibility",new { uid = item.Uid }, null)%>
public ActionResult EligbilityResponse(string uid)
I have one problem with actionlink. My Example is: i have one view and controller named as XYZ.aspx and XYZ.vb controller , in this view i put below line
<%=Html.ActionLink("Manage", "Index", "Advertisement", New With {.aintCampaignid = Cam.CampaignID})%>
I have another view and controller named as Index.aspx and Advertisement.vb if click on manage link in XYZ view it will call to advertisement controller and index function But iam getting [URL], it wont call ..
I have the following code and wanted to know how to use the ActionLink par to to a page with a seperate controller/view and pass the Mode.ProjectId into this other controller/view.
View 4 Repliesi have an application mvc3, created a link with ajax but confirm property does not works.
index.cshtml is
@{
View.Title = "Home Page";
}
@section Header{
<script src="../../Scripts/MicrosoftAjax.debug.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcAjax.debug.js" type="text/javascript"></script>
}
<h2>@View.Message</h2>
@Ajax.ActionLink(
"Delete Product",
"Delete",
new { id = 1 },
new AjaxOptions { HttpMethod = "DELETE", Confirm = "Are you sure?" }
)
and home controller delete action
public ActionResult Delete(int id)
{
return View();
}
but directly does delete page. how can i confirm box show?
I am trying to use link to submit a form using the following code:
function deleteItem(formId) {
// submit the form
$("#" + formId).submit();
}
Basically I have a grid and it displays a number of items. Each row has a delete button which deletes the item. I then fire the following function to remove the item from the grid.
function onItemDeleted(name) {
$("#" + name).remove();
}
It works fine when I use a submit button but when I use action link the JavaScript from the controller action is returned as string and not executed.
public JavaScriptResult DeleteItem(string name)
{
var isAjaxRequest = Request.IsAjaxRequest();
_stockService.Delete(name);
var script = String.Format("onItemDeleted('{0}')", name);
return JavaScript(script);
}
And here is the HTML code:........................
Is it possible to use a condition inside an actionlink ?I would like to do this :
[Code]....
This will be used for some column sorting and if the current sort was asc the next sort has to be desc. The code above is not valid while compiling.
I have been using this tag ActionLink().Replace in asp.net mvc 1.0:
<li><%= Html.ActionLink("_place_", "Index", "Home").Replace("_place_", "<div id='homeOff'></div>") %></li>
I upgraded the project to mvc 2.0 and now this .replace() does not work any more. I was looking for equivalent code for this.
i'm trying to set different css class on an action link, it's very easy with a regular one, but i'm strugeling with this one:
[Code]....
i figured out already that using the viewdata["culture"] will not work, since i didn't set a culture in the controler. but i do get the /en/ in the link itself.
the question is how do i do it? i have a localization helper, but can i do it there ?
How do you use and Html.ActionLink to go to an external site?
View 9 RepliesI am developing a page that has an image element that has its source set to an action on a controller (e.g., "/controller/action". The problem that I am having is that I don't see a built in way to generate a URL (i.e., like an ActionLink's URL) without manually constructing one. At the moment, I am manually constructing the URL, but I want to move away from this. Before I write my own helper method, I thought I would check to see if one it already available. Does such a method exist?
BTW, this is using MVC2, VS 2010.
[Code]....
Navigate between controllers using ActionLink in mvc2
i have a view that i need to add the following code to it :-
<%= Ajax.ActionLink( "event",
"Register", "ArticleComment" new { id= Model.article1.Article_ID },
new AjaxOptions { UpdateTargetId="rsvpmsg" }) %>
but it raised a red line under Ajax.ActionLink indicating that it do not contain definition for ActionLink
I'm showing a small table with a list of usernames, and I want an ActionLink next to each username to Edit the user on another page.
[code]...
The usernames display correctly, just the link doesn't show up. I'm not sure why it wouldn't throw an error instead.What am I missing here?
I try to have an URL like this /Forum/Index/2 for url I have a route {controller}/{action}/{page} in my global.asax
If i test the above url with the Route Debugger it corresponds to the above route ( and some other but this is the fist one in the list ) but if I create an url with the ActionLink
( like this : [Code]....
),
this methode return me this URL /Forum/Index?page=2 Is there a way to a have an url with nothing in querystring with the ActionLink methode ? Gauthier