|
|
You can call it blabla as I told...it has no meaning!
Yeah but how it knows it should display string "Name", "City", etc. as titles of the table then?
|
|
|
|
|
You actually ask how the IDE knows that your model inner type has properties by that name, so when you type . (dot) you can write the names...
1. The IDE actually compiles your code
2. You gave the context of your type in the line of @modle
3. The DisplayNameFor method has two overrides, one for IEnumerable<t> and one for T, as T is known there is no problem to let you use intellisense...
Skipper: We'll fix it.
Alex: Fix it? How you gonna fix this?
Skipper: Grit, spit and a whole lotta duct tape.
|
|
|
|
|
As in my original question, what is there model and what is Model ?? (when used inside html - not in the first line I mean)
|
|
|
|
|
When referring to the model passed to the view you use Model. Your DisplayFor is an extension that works on the current model object and it uses a lambda expression to say what property you are interested in, with the "model => model.Name" being the expression. The way expressions work is you pick a variable that is used to refer to the object, that's the bit before the =>. Anything after the => you can use that variable. The variable can be anything though, the reason model.Name is working for you is because you called the variable model. This code is just as valid
@Html.DisplayNameFor(xyz => xyz.Rating)
In that case xyz is the same type as your model and Rating is the property on your model.
Your code isn't valid though as your model is an IEnumerable which doesn't have properties like name etc. If you want to get the header row for your data, you can do something like
@Html.DisplayNameFor(model => model.First().Name)
"model" is your IEnumerable so you're accessing the Name property of the first item in your IEnumerable which will be a RestaurantReview type. Note this will fail if you don't have any items in your model, so check the model isn't empty first.
|
|
|
|
|
Your code isn't valid though as your model is an IEnumerable which doesn't have properties like name etc. If you want to get the header row for your data, you can do something like
That is my point!! The code is valid though because it was generated by Visual Studio Template!!
I was also surprised if model (with small m) refers to IEnumerable , then how come model.Name makes sense? do you understand?
modified 20-Sep-15 9:46am.
|
|
|
|
|
Looking at the documentation of the DisplayNameFor method[^], there are two overloads:
DisplayNameFor(HtmlHelper<TModel>, Expression<Func<TModel, TValue>>) DisplayNameFor(HtmlHelper<IEnumerable<TModel>>, Expression<Func<TModel, TValue>>)
In this case, since your model is IEnumerable<RestaurantReview> , you're calling the second overload.
That overload takes a function which accepts a single item from your enumerable sequence, and returns one of its properties.
So in the code you've posted, model refers to a single RestaurantReview instance, not the IEnumerable<RestaurantReview> represented by the Model .
The naming convention is slightly confusing - it might have made more sense to have:
Html.DisplayNameFor(item => item.Name)
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Thanks finally I have heard something that is close to a reasonable explanation. Please add further details, if you like.
|
|
|
|
|
By the way if I do this:
<th> @Html.DisplayNameFor(model => model.name)</th>
Where
@using TestMVCApplication.Models
<!--
@model List<Product>
I get
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: CS1061: 'System.Collections.Generic.List<TestMVCApplication.Models.Product>' does not contain a definition for 'name' and no extension method 'name' accepting a first argument of type 'System.Collections.Generic.List<TestMVCApplication.Models.Product>' could be found (are you missing a using directive or an assembly reference?)
Why?
PS Product has that property though
|
|
|
|
|
I think the problem is that the generic HtmlHelper<TModel> class is not covariant. Therefore, you can't cast an instance of HtmlHelper<List<Product>> to HtmlHelper<IEnumerable<Product>> .
In this case, the model parameter will be the same type as the Model - ie: List<Product> - so you'll need to use FirstOrDefault in the lambda expression:
@Html.DisplayNameFor(model => model.FirstOrDefault().name)
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
One more question. Why here
@Html.DisplayNameFor(model => model.name)
The title (e.g. "Name") of the property is printed on my web page instead of value of property?
|
|
|
|
|
Because you're using DisplayNameFor . When you want to display the value, you use DisplayFor .
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
inconvenient and confusing syntax overall, I would say.
|
|
|
|
|
Hello All,
Kindly let me know what is the alternative of VSFlexgrid activex control in asp.net mvc.
VSFlexgrid as per my knowledge behaves like in left panel it is tree and in right panel it is grid with excel like column which are used to edit within itself.
Thanx in advance
modified 16-Sep-15 6:03am.
|
|
|
|
|
I haven't heard or seen the word activeX in over a decade.
I think these were for VB6 and older windows programs, and do not apply to asp.net.
In asp.net, it's called the gridview.
|
|
|
|
|
I am a newbie in this.
actually the control is in old asp work , where there was a control called VSflexgrid as far as my knowledge is concerned on this.
Even i may be wrong.
But the functionality of the control is as such.
1) in left panel it shows treeview and in right panel it shows excel like cells in grid format.
2)These excel like cells do have different events associated with them like on typing something in the individual cell on mouseout the cell value get display to some another control.
3)the treeview and excel grid are collapsible, means the treeview node gets collapse like the adjacent rows of excel grid also gets collapsed.
I hope this can be understandable.
Based on this please kindly suggest me this functionality is achievable into the Asp.net MVC.
|
|
|
|
|
Currently, there is a Treeview control and a Gridview control.
So you use the Treeview on the left, and the Gridview on the right.
But I have used the treeview several times in the past, and don't recommend it unless you really need it. I used it in code behind, and it's one of the most undocumented and hard to understand controls that I have ever used besides the report writer.
Today, asp.net is Web stuff
vb.net is windows programming in Visual Basic
c#.net is windows programming in cSharp.
ocx or activex controls go back to Visual Basic in 2003 and prior, back when there was Visual FoxPro and so forth.
|
|
|
|
|
Thanx for your reply .
but i want this behaviour to be used in sync with each other.
so is there any control with both the functionality in a single control.
|
|
|
|
|
We maked login page then click login go to other page ok
after that like gmail if we changed url then dont go to home page and dont go to back so simple i want to need code
can u send me
|
|
|
|
|
Once you navigate the user off the website, you can't really go back, since you don't control the other website.
The back button works because they have a cache of web urls, and web pages that they load when you click the back button.
Your idea is a really bad one, poor design.
|
|
|
|
|
WATH IS ASP.NET ,.NET ,framework
:confused
|
|
|
|
|
|
|
I want to add a where clause within a viewbag, to only display items depending on who has access to view the items
|
|
|
|
|
not much clear
modified 20-Sep-20 21:01pm.
|
|
|
|