I'm using ASP.NET MVC 3 right now with unobtrusive jquery client validation. By default, ValidationMessageFor generates a span tag with certain classes and attributes set. I would like it to generate a different template instead. For example, I might want a div tag with a certain background image.Is this possible at all, or can I just obtain the plain text error message from there so I can do my own styling?
So, is this the way it's supposed to work? Shouldn't enabling client-side validation highlight non-validating elements by default, without an needing to create an associated Html.ValidationMessageFor(), if it has a DataAnnotation validation attribute?
I was working on migrating MVC1 app to MVC2 today and i have come across a problem while changing the ValidationMessage to ValidationMessageFor implementation.
Let's say I have a property and a textbox on a view
[Code].... I don't understand why each time I use the modelbinding validation like this
[Code]....
I still get the error displayed, But this time only by Html.ValidateSummary(). the textbox is not highlighted anymore and Html.ValidateMessageFor() doesn't display any message at all.
Is there something I should do the solve this problem? It's important because I have many form that user need to fill out. It's important to highlight the textbox to make it obvious to them.
I am learning MVC using the v2 release with Entity Framework v4. Let's say I have 3 objects Game, Points and Players. They are related in the following manner:Game has points and the Points can have a player associated with them ( 1 Game to many Points and a Point object can have one Player).
I am attempting to use the EditTemplates feature in MVC2 to render my views. In my Game Edit view I want to have the basic Game object information editable, and also the related Points objects. Currently I am utilizing "`<%= Html.EditorForModel() %>`"(Which seems pretty slow) to render the Edit View and then I have a specific Game and Point EditTemplates.
The data renders correctly and is editable for both the Game and Point information. When I go to perform the update and submit the form I receive the "Game" object in my Update ActionResult. The basic properties are populated for the Game object but any deep properties such as Points are not; they appear as null. If I look at the Request.Form variables in debug I can see the Points fields are being passed to the server but do not place themselves back into the Game object.
In my Game EditTemplate I am using the following to render the Points objects:
<%= Html.EditorFor(c => c.Points) %>
My Points EditTemplate looks like: [code]...
why this is rendering as "Points.Points[index] instead of Points[index]? I tried messing with the parameters in the EditFor:
So I have two nested view models, CreditCard -> BillAddress. I have a view, "EditBilling", that has EditorFor(CreditCard). The CreditCard EditorTemplate has EditorFor(BillAddress), and the BillAddress EditorTemplate has EditorFor(BillState).
The end result is a select list with id "CreditCard_BillAddress_BillState".
I need to reference this in javascript, thus need to know the ID. In other situations, with non-nested ViewModels, I have used the following code:
The problem here is that the ModelMetadata.PropertyName property is only aware of the current property, not the parent(s). So I end up with the following:
$('#BillAddress_BillState')
How does one go about getting the client ID of nested strongly typed helpers?
The lack of an EditorFor file in asp.net mvc 3 seems like such a glaring omission I wonder: Is there some way that mvc handles file uploads that is just not publicized that well? As near as I can tell there is no built in way to handle file uploads.I'm just curious if the file upload capability is in fact there and I'm just missing it, or if it does not exist at all.
I've been trying to something with the templating system in MVC2, but what I thought should be simple has not been successful. So now I question if it's possible or if I'm missing anything obvious. The scenario:
I have a base template as a strongly typed view that is set up in the ViewsSharedEditorTemplates folder...call it CommonItem.ascx. It wants a model item of type MyItemType.
I have a template that is a wrapper around the previous template, is also strongly typed of type MyItemType, residing in the same folder. Call this one CommonItemWrapper.ascx.The contents of CommonItemWrapper.ascx includes divs before/after a declaration Html.EditorForModel("CommonItem").
My expectation would be that the inner template (CommonItem) would be displayed within the outer template. Unfortunately the inner template never gets evaluated.
Am I missing something? Am I mistaken in thinking that templates can be nested in this manner? If so, is there another means to accomplish this?
I am generating the controls for an MVC Create Form using html.editorfor().How can i add style properties to whatever is created? For instance i have a control which is generated by html.editorfor() as a single line textbox but i want it to be a multiline textbox.
I would like to exclude one of model's property from the Html.EditorFor. I tried [HiddenInput(DisplayValue=false)] but it renders the property as an hidden input. This could potentially be a security problem. How can we completely exclude a field from Html.EditorFor?
I'm trying to do this: Editing a variable length list, ASP.NET MVC 2-style
In the post he mentions that it could be done with less code using Html.EditorFor(), but that it would be more difficult because of the indexes. Well, that's exactly what I want to do, and I don't know where to begin.
Update 1: Instead of generating a GUID for each item in the collection, I'd like to generate incremental indexes starting with 0. Right now the field names look like "gifts[GUID].value"; I would like them to be "gifts[0].value","gifts1.value" etc. but I don't understand how the collection keeps track and generates these indices.
I'm trying to add a `Class` to the `EditorFor` Helper inside an `EditorTemplate`.
The problem is that because I'm using Unobtrusive Validation, the input element already has classes assigned to it.
Here is my EditorTemplate
[Code]....
And here is the output <input class="text-box single-line" id="BirthDate" name="BirthDate" type="text" value="08/08/1980" />
You can see here that the `datepicker` class has not been added, yet the "value" has been properly formatted.
Basically I can see that the `EditorTemplate` is working, but the `Class` is not being appended to the rest of the classes on the `<input>` element. Do any of you know how to fix this?
Generally speaking we create a custom view for each page. So for an edit view of a car the model might be:
Car CarToEdit{ get; set;} List<SelectListItem> CarManufacturers{ get; set;}
This has the advantage of giving a strongly typed view. It doesn't decouple the data layer well, but that is a separate issue. I'd then need to do something like (very approx syntax) :
Because of this, I can't use an EditorFor, and just pass in the model, as it would not render out the dropdownlists. So I think why not annotate the manufacturer field with UIHInt... great that works. ... but how do I pass in the data (both the manufacturerId, and the List<SelectListItem> to the hinted field?One solution is to have the UIHint control do a RenderAction. So the main view would include a line like:
[Code]....
Which would in turn go and render a view :
[Code]....
This works, but seems a little long winded. Can anyone suggest better ways of achieving this?Is anyone actually using UIHint?Also it would be good to be able to cache the output from the partial view (the dropdownlist) which is called from the RenderAction method... but output caches are is basically ignored on a render action (unless I've missed the point here).
I'm finding my self with the problem that if I do not show the Template for a "complex" object I have in the main view object I still get the errors in the summary. How do i get around this?
I've got a model with say:
->Persons (has its own editor template) ->Pets(has its own editor template)
In the create view I show each one depending if they are not null. But when I try to validate HouseType and say I have Persons not null and pets is null. I get errors of validation for pets.
The view is strongly typed on AddressViewModel, and renders html elements using the xxxFor() helper methods, e.g.:
[Code]....
The html elements' names get prefixed by Address, so the name of the text element for the city ends up "Address.City" and the select element for the state ends up "Address.StateId".
I then added validation (a'la NerdDinner) - when the Address detects there is something wrong with the City it throws an exception and the controller retrieves the violations from the Address, e.g.
[Code]....
The problem (I think) is that ValidationMessageFor() looks for an error for a property "Address.City", however the error was added using the property name "City".
How does one deal with this problem - the problem being that the property name in html ends up not the simple property name that the validation logic used?
The model has a required attribute for the first name property:but I would like to make this happen automatically if the property has the CustomRequiredAttribute. Is there a way to override the Html.TextBoxFor() and check for the attribute on the given property? Or is there another way to accomplish this behaviour?
I have been using web forms and I have been let down by them. I hate the way it mangles my element id's and names. I want to have full control over my html and have the ability to have multiple forms on one page.
I do not use view state or post backs. All my server communication is done using JQuery ajax and sometimes page methods.
My pages do not make use of any runat=server controls other than occasionally using the repeater.
For now I have been using inline code like the following but I like the mvc html helpers.
EXAMPLE:
[Code]....
At the moment, using the asp.net mvc framework is not an option but I would like to use the HTML helpers in my asp.net application.
Is this possible to use the mvc html helpers or do I have to create my ow helpers?
I just upgraded my mvc 1.0 project to 2.0 using the wizard. My project builds fine however, my html helpers that I have used, does not render the input's ID tag. For some reason, only some controls render and some do not. For example:
[code]....
I thought it had to do with the fact that the value is empty, but from the two examples, they are nearly identical. Is this a bug? All was working before I upgraded.