Asp.net Mvc 3 - .Net, MVC3, And Razor - Modifying ActionLink Helper?
Jun 21, 2011
How do I modify or create my own Html.ActionLink helper to accept and handle the first parameter (linkText) passed in as an empty string / nothing?Details: I currently have a strongly typed view that's passed a model which contains search results. My view loops through each item in the model and attempts to display a link to a contact with the following code:
@Html.ActionLink(currentItem.ContactName, "contact", "details", New With { .id = currentItem.ContactID }, Nothing)
Normally this would work just fine, but not every item in my search result has a ContactName. The Html.ActionLink helper errors when this first parameter is empty. In case it helps, here's the model property for ContactName (which is generated from a template due to Database First, so I don't believe it can be modified):
Public Property ContactName As String
I'd like to have a helper function that simply returns nothing if the ContactName is an empty string / nothing.I'm guessing I need to extend this helper, and I've struggled to find any good, up-to-date resources in VB.net for extending helper functions. Other approaches are more than welcome if they're considered best practice. I'm working in VB.net, MVC3, and Razor in the ASP.net 4.0 framework.
I've the following code for a DropDownListFor and is working ok
@Html.DropDownListFor(Function(model) model.Habilitacoes, New SelectList(ViewBag.Habilitacoes, "KeyHL", "DescricaoHL"), New With {.class = "FillHSpace"})
Using MVC3 and Razor View engine, I created a VB.NET web application in VS 2010. This creates the default Account and Home Controller along with corresponding Action Views.Now if I open any vbhtml file I get the following error message in the Error List window.
Error 50 Syntax error. C:****MVC3AppVBViewsAccountLogOn.vbhtml MVC3AppVB (See screenshot here http://www.flickr.com/photos/7672540@N07/5469248676/)
when i do this, i get the ACTION being called TWICE, what should i do about this?
if i call html.partial instead to just render the control, then i need to specify all the objects/values manually, which i shouldn't need to do this as the ACTION itself takes care of this stuff.
i maeks sense to have both these work together but they don't, what should i do?
Basically, i don't want to use <input type="submit"> mainly because it's a button, i'd rather user ActionLink, so i am using Ajax.ActionLink, and i'm not sure what to place in the routeValues argument for it to pickup the new (edited) data (user enters comments etc) and send it to my action.this is what i have, but of course, it sends the original comment before user edit back to the server/action :)
<%= Ajax.ActionLink("Update", "UpdateComment", Model.Comment, New AjaxOptions With {.UpdateTargetId = Model.CommentDivId, .HttpMethod = "Post"})%>
ps: i know how to do this in javascript, and doing ajax posts etc,
It seems that in C#, a solution can contain multiple projects, which, I guess, would compile into separate but somehow related programs. It seems that this functionality is missing in VB, even though VB uses solution files as well.How would someone go about creating a tool or utility or "helper app" for a project? For example, a command line version of the program, which is a separate executable, but obviously would be distributed as part of the main program? Maybe I want to integrate a feature into windows where the user can right click on a certain file and choose "convert" from the context menu, where "convert" would open the helper app, which would read the file and save an updated copy of the file (converting from one file format to another and saving the result) without the user needing to wait for the main program to load, wait for the interface to be configured, then wait for the file conversion. The helper app would not need to display an interface to the user - just convert and save the file.
Lets say I wanna write a string "Hello World" into a MemoryStream and read this string to MessageBox.Show() without using Helper objects such as BinaryWriter and BinaryReader and StreamWriter and StreamReader etc.
how to accomplish this with low-level functions of MemoryStream stream object.
I want to build a MVC helper function for which I pass a Entity Framework object and have it build a select. Generally speaking I tried something like this:
Public Function RenderSelect(ByVal helper As HtmlHelper, ByVal sSelectName As String, ByVal aItmes As Array, Optional ByVal sTitleKeyName As String = "name", Optional ByVal sValueKeyName As String = "id") As String ' open select
[Code].....
However, it isn't working. It would be great to have a way to do this and pass the current entity object.
I'm quite new to MVC and while I've been trying to follow the best practices , I believe I may not be understanding certain fundamentals of either
-a. Using models and viewmodels appropriately
-b. Passing models into a controller for validation purposes.
The general purpose of my program is to select a stored procedure from a list of stored procedures, create a form where the user can fill out all the appropriate input variables, and then to execute that stored procedure. The tool is for non-technical people, so I'm eventually going to have to do a good deal of input validation.
As such I have four models: A Script Model, a Parameter Model, a Parameter Enum model and a Query Model, and two viewmodels: a paramviewmodel that generates the form to fill out, and a scriptviewmodel that creates a listbox filled with the possible script choices. I am using a prewritten database system to fill out my viewmodels in an init method in my controller (which I'm not sure is the proper way to do this?).
The viewmodels are as follows:
Imports System Imports System.Collections.Generic Public Class ScriptViewModel
[Code]....
I'm trying to work out the functionality. Also, I think this may be too much code in the view, even though most of it is display code.
Anyways, I have two main questions. One, does creating a model in my controller, calling an init method on it, and then passing it to the view make any sense in an mvc context (if not, how would I proceed?). Two, if I want to perform validation on the form I output in my htmlhelper, but I want to use my query model validation (and not my paramviewmodel), how can I do that? Most of the examples I've seen involve a controller that recieves an appropriate model variable, and the binding is performed outside the controller itself. They then just check modelstate. Is there any way I could do something similar here?
Edit: Is there any way I can make the syntax highlighting less crappy?
Function Monitor() As ActionResult Dim db = New QuarterDBContext() Dim items As IEnumerable(Of SelectListItem) = db.getQuarter.[Select](Function(c) New
I have a razor.vbhtml view and would like to use string resources normally accessible via My.Resources. Seems like I can only get to My.Computer, My.Log and couple other namespaces from the view, but not My.Resources. I've tried changing access modifier to public and adding Imports, neither worked.
I just downloaded the MVC 3.0 RC and I'm excited to start using it, especially the Razor view engine. However, due to a few stick in the mud type people here, we are stuck using VB.NET instead of C#.When I started trying it out, I noticed some quirks. If you are creating a Razor view using CSHTML, you can write code like this:
@foreach(string genreName in Model.Genres) { <li>@genreName</li> }
Razor will automatically detect that the <li> text is an HTML tag and will switch out of "code mode". With a VB.NET VBHTML file, this doesn't seem to be working. It's making me put the @: keyword in front of each line like this:
@For Each genreName As String In Model.Genres @:<li>@genreName</li> Next
If I don't have it there, I get a runtime error. Also, the <text></text> tags don't seem to work.