How To Get The Column Titles From The Display(Name=) DataAnnotation For A Strongly Typed List Scaffold View At Runtime
Feb 9, 2011
how do i get the [Display(Name="Some Title")] DataAnnotations "Some Title" rendered in the List scaffold view's output?
I create a strongly typed list scaffold view for this class:
public class CompanyHoliday
{
[Key] [code]...
However i don't want "Date" and "Name" in the table header - i want "Datum" and "Feiertag Name" rendered there dynamically. The actual column header titles should come from the Display Dataannotation.
When I am creating Strongly Typed View I get lots of Classes in View Data Drop down. Classes like Automapper, ninject, Interface..., latebound... Due this its very hard to find my project classes. Is there any way to restrict dropdown to only display my project classes?
I have an application that is going to allow a user to create records of type Customer and Seller that have one section in common, but other fields that are unique to their types.
Both of these types will have an address block for their create view.
If I have a strongly typed Customer or Seller view, how can I use the view partial (containing the address block) that I've created? I've tried creating a view model, but I don't know how to have the create page inherit the Customer model and the addressBlock partial inherit the addressBlockForm partial model...
Long story short, I'm trying to add a few extra items to ViewData to make my life easier, and its an edge case that doesn't really justify its own model just for this one case. Keep reading for more specific details.
So I have a strongly typed edit view for one of my objects, everything works great until I try to put a dropdownlist on the view with an ID that does not match a property of my class.
I have this
[code]....
My expectation is that in the controller action that accepts the POST, I will manually use the FormCollection[] to read out that ID and populate MyOtherModel with the correct ID.
How much time is spent compiling a view in ASP.NET?Of course I don't expect anyone to give me a number, but I think it's interesting to have an idea of how much time this takes because it could influence the way we implement things.For example, if the time is significant , then I might try to put every result that I need to display in the view in a model class instance (created just to hold the values in such a way that I don't even have to test for objects with null value) and then minimize to the maximum (uh?) the amount of C# code in the view thus decreasing the amount of time necessary to compile the view.Question Does this make sense? Give some thoughts on this one.
Can my strongly typed view use a generic with a constraint? The type I want to pass to the view is
RoleGrantedToPerson<T> where T: Aggregate I don't know what T is at design time, only that it is a child of the base class 'Aggregate' I have tried using
I am not sure why this happens, but when I have an Html.TextBoxFor(model => model.SomeObject.SomeProperty), when I post, the property of that object is always null.
When I look at the markup generated, I see <input type="text" name="SomeObject_SomeProperty" id="SomeObject.SomeProperty" value = "" />
If I change the helper to Html.TextBoxFor(model => model.SomeObject.SomeProperty, new {id = "SomeProperty"}) the controller is then able to pick the value up. Why is this happening? I feel as though I shouldn't have to be specifiying the id for the textbox as it works when fine when not using child objects on a view model, IE <%: HtmlTextBoxFor(model => model.SomeProperty) %>.
I'm looking for a good way to add arbitrary properties to the objects in a strongly typed list, based on the principle that I shouldn't pass a DataTable from my business layer to my presentation layer.For example, I might have a Category class with the properties CategoryId and Title. On one page I would like to fetch a list of all categories (ie. List<Category>) together with the most expensive product in each category.A while ago, I would have just returned a DataTable with some additional columns in it with the product data in, but I'm trying not to do that -- it would be trivial to set up it's not good practice. One option is to add a MostExpensiveProduct property to my Category class, but I might want to display the most recently added product in another case, or the cheapest product, so I'd end up adding a lot of properties to cover all the options. This just doesn't feel right to me.Am I missing a trick here? What is the best way of doing this? Or should I just be returning a DataTable to which I can add as many columns as I need and not worry about it?
I have controller method that looks something like this:
[Code]....
notice the commented out line. This method used to return an IEnumerable<Sport> but now that I have used a LINQ query it is returning an IEnumerable of an anonymous type (I think that's the correct terminology - please correct me if I'm wrong).
Question I have is...can I add a strongly-typed view based on this anonymous type and if not, how do I write a view that can access this collection?
public class MyViewModel { public MyObject myObject{ get; set; } public List<MyList> myList{ get; set; } }
I have a view with a form strongly typed to MyViewModel This view allows you to enter values for the properties of MyObject, as well as create a list of MyList objects. The List part works fine although I thought that would be the more difficult of the two. Assuming MyObject has a property Description I create a textbox to enter the value as such:
@Html.EditorFor(x => x.myObject.Description); The text box renders with an id of MyObject_Description...The problem is when I post this to my controller action, MyObject does not get bound at all(althought the list items do as they recieve the appropriate IDs of "MyViewModel_MyList[guid].myListValue") What am I doing wrong here?? EDIT: more info The first line of the view is: @model MyApp.ViewModels.MyViewModel And the Action method: [HttpPost] public ActionResult Create(MyViewModel myViewModel) { } I am passing a new MyViewModel into the partial view to begin... public ActionResult Create() { MyViewModel model = new MyViewModel(); return PartialView(model); } EDIT 2 Ok When I render my partial view that contains the forms I call : @{Html.RenderAction("Create", "MyController");} this is called from within a View of type @model IEnumerable<MyApp.Models.MyObject> (this view displays a list of currently existing MyOjects, and at the bottom the partial is rendered to allow the user to add another MyObject to the DB)
I would like to know how i can bind my form values to my strongly typed view from a MultiSelect box. Obviously when the form submits the multi-select box will submit a delittemered string of my values selected...what is the best way to convert this string of values back into a list of objects to attach to my model to be updated?
public class MyViewModel { public List<Genre> GenreList {get; set;} public List<string> Genres { get; set; } }
When updating my model inside the controller i am using UpdateModel like below: Account accountToUpdate = userSession.GetCurrentUser(); UpdateModel(accountToUpdate);
However i need to somehow get the values from the string back into objects. I beleive it may have something to do with model-binders but i can't find any good clear examples of how to do this.
Then I have page that would has a list of ForumPost(s) and and edit option, all on one page. To achieve this I've created a CommentsViewModel that extends "ForumPost" class like so:
[Code]....
This way on my view I can have a list of ForumPost(s) and a form that would edit the post.This is what i see in the debug mode right before the save call:The problem is that when I try to Save/Update I get the following error:I already tried doing this:
[Code]....
with no luck. for some reason downcasting doesn't work and the model or row are still of type CommentsViewModel instead of ForumPost
I try to use HtmlHelper.TextBoxFor with spark view engine but view crashed with exception "Dynamic view compilation failed. 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'TextBoxFor' and no extension method 'TextBoxFor' accepting a first argument of type 'System.Web.Mvc.HtmlHelper' could be found(are you missing a using directive or an assembly reference?)".
It is my _global.spark: <use namespace="System"/> <use namespace="System.Linq"/> <use namespace="System.Text" /> <use namespace="System.Web.Mvc"/> <use namespace="System.Web.Mvc.Html"/> <use namespace="System.Web.Routing"/> <use namespace="System.Linq.Expressions" /> <use namespace="MyModels" /> In spark-view using: ${Html.TextBoxFor(m => m.UserName)}
Note: I'm working with MVC3 RC and Razor views.I've got this model:
[Code]....
I want to have a strongly typed create view for this model, that allows you to insert 1 to many addresses and phone numbers as part of the view. Ideally, the Action is strongly typed as well:
[Code]....
What would this view look like to facilitate creating 1 to many Addresses and PhoneNumbers, as well as having the state re-created correctly if the ModelState fails when posting? I've tried a number of variations including EditorTemplates and can't figure out how to do this.
When I send a strongly typed ViewModel containing other ViewModels nested inside (basically spanning 3 tables into one object) all the data is correctly presented when debugging. However it complains at rendering time with an exception "Compiler Error Message: CS1061: 'object' does not contain a definition for 'Name' and no extension method 'Name' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)"
and the error is thrown from mvc2-rtm-sourcessrcSystemWebMvcMvcViewPageControlBuilder.cs method: ProcessGeneratedCode line 19
in the body of a strongly typed view, I get full intellisense for my model.
However, if I put:
<a href="/Projects/Edit/<%=Model.Project.Id %>">
With the script being written within an html property (in this case the href="" property), the intellisense doesn't work.I imagine this is a limitation of VisualStudio, but it seems this is a very common task and should be able to work. Is there a fix for this? Does my version of VisualStudio have a problem?
I personally dont like doing this as i find it makes it harder for me to know if someone changed the field name, or mis typed it during development - the other way you won't know until the page loads.
With the strongly typed version if something changes in your DAL etc the build will break - letting me know I've messed up.
Why do so many people appear to use weakly typed code in ASP.Net (in examples, MVC, etc)? Am i missing something?
Given the benefits of using strongly typed views to eliminate typed errors and the use of lambda expressions why would one use a dynamically typed view? When I use them I don't feel as safe as with strongly typed views. Am I missing something? Is there a special use for them?