MVC :: Scaffolding In 2 - Use Templated Helpers OR Dynamic Data?
May 25, 2010
Can I seek some advice here if I want to incorporate some automated scaffolding in my MVC 2 web application what is the best way to go? Should I be considering: MVC 2 Templated Helpers, or Dynamic Data (with support for Entity Framework) Roughly speaking I want to layout my own website layout in MVC 2 but then:
for high usage use cases custom define the page, for CRUD maintenance pages hook the website menu to point to some scaffolded auto-generated pages (i.e. it is for this item that I ask the above question). I've had a look at the Dynamic Data pages where you can add/edit/delete all aspects of an EF entity, so it's this type of thing I'm after (e.g. have an Edit Person menu link that when click launches an auto maintenance page for Person)
I don't know if this is possible but I would like to customize some of the HTML helpers autogenerated in the template. For example, I would like to replace the LabelFor with something that will allow me to specify an image with the label and also a ToolTip property so when you hover over the label you get the tool tip.
I would like use Dynamic Data to scaffolding my table forms, and I followup this link [URL] The problem I cannot find Dynamic Data when I create web project. My .Net version is 3.5 and my Visual Studio 2008 Professional full installation. How I can install ASP.NET Dynamic Data and use it with Visual Studio 2008?
I am using the Html.DisplayFor() and Html.EditorFor() helper methods to auto-scaffold a Display view and Edit view for a Municipality entity.
My Application layer is used to retrieve a Municipality class:
[Code]....
For the Display view this entity is mapped to a DisplayMunicipality class containing Display meta data:
[Code]....
For the Edit view this entity is mapped to an EditMunicipality class containing Edit meta data:
[Code]....
This works fine but it requires a lot of extra code, not only the code mentioned above but also all kinds of conversions inside my controller.
Is it possible to put the meta data in the Municipality class that is returned from the Application layer? In that case I need some mechanism to specify that a property should be shown in the Display view or Edit view.
I have a gridview and one of the fields is a template field. The item template is a label and the edit template is a drop down box that all works lovely.in the Gridview1_RowUpdating event I would like to compare the original value for this template field with the new value (see if it goes from Pending to Approved). but I am struggling to find the old value for this field. I could save it to a module level variable in the GridView1_RowDataBound when I set the row to 'edit' but I think there is a better idea out there. I have tried to access the datarowview but it keeps coming back as Nothing e.g. This retuns nothing:
[Code]....
Does anyone have any ideas other than recording the data in the RowDataBound event please?
I've created a templated user control by following the example on the microsoft support pages. I won't post it all but the important part of the CS file looks as follows:
[Code]....
I'm not sure if the whole _CurrentDataItem business is required, I don't think so.The problem I've got, is that I've tried nesting it inside a FormView control so I can use it to display a record from a database. My ASPX looks like this:
[Code]....
Now, the bound properties (TitleText and TitleSubText) bind correctly, but the nested / template content is blank when the page loads. I'm not sure if this is something to do with the order in which everything is loaded or because I'm missing some code in the SimpleTemplate to get it to bind (etc.).
Basically, I have a custom templated control with a custom data container class. When a developer adds an instance of my control to a page, they can define the controls in the LayoutTemplate however they like, as follows:
I would like my control to automatically move the "ml_errormessage" (databound content from Container.ErrorMessage - hard coded token in the property) to be a class of its containing element to make it easier for jQuery to use a selector to find the element and dynamically insert the error message client side. More importantly, I would like it moved out of the way so the class name doesn't get replaced by the content and jQuery can find it as many times as it needs to during the page lifecycle. In other words, I would like the output to look like this without the developer changing the input template or resort to using custom controls in the template:
I would like to move the value using the controls collection rather than resorting to string parsing of the output, if possible. However, when I interrogate the collection in an override of OnPreRender, the control in the template looks like this in the debugger:
As you can see the "ml_errormessage" value is nowhere to be found. Upon analysis of the DataBind event of the Control class using Reflector, I see that it delegates the binding behavior to each control. In other words, each control handles its own databinding. However, since I have no way of knowing in advance what control types will be in the template, how can this change be done?
Note: an acceptable alternative would be to add a new HtmlGenericControl (span) in the exact spot where the "ml_errormessage" is and add it as a class to this new control.On a side note, is there an easy way to get the control's output to indent for easy reading during debugging?
I'm using VS 2008 Pro SP1 with ASP.NET MVC 1.0. When I try to create a strongly typed view, I cannot choose a model class. If I type the class name manually, the view type listbox is disabled, any previously chosen value is reverted to Empty.
With the help of this excellent step-by-step guide (http://jon-ilgrim.blogspot.com/2008/10/aspnet-mvc-web-site-template.html), I was able to convert an ASP.NET Web Site to be MVC enabled. However, I do not get all those nice wizards - for example, right-clicking in the project area and selecting Add -> Controller or -> add View.There are several sites that describe enabling this by adding a ProjectTypeGuid in the project file, but web sites do not have a project file.Is there anyone out there who has gotten this working in a Web Site?
I was reading this article, http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx, and that looks very interesting. However I wonder if there is a way, or probably attribute, available with which I can prevent auto scaffolding of certain properties of my model?
I need your advises regarding the scaffolding with my current application, I use ASP.NET Web Application from the menu but later on I would like use scaffolding top-up the exist application. I am NOT sure, Can I use scaffolding with my exist application without need going to Dynamic Data Web Application? BTW: my application needs users registration and authentication based on ASP.NET solution, and this will NOT work with Dynamic Data Web Application.
Is there any existing software for generating a UserControl from a table of a database?
For example, my table contain 3 fields : name , last name , age.
The software generates a user control that has 3 labels and textboxes with validation and submit button and a gridview for displaying information , etc..
Shouldn't ScaffoldColumn(false) hide the field in the view? I create a strongly typed CREATE view (AddSO), expecting that the soID column won't be rendered and that the Label name of the field 'name' will be 'Full Name'. But the AddSO view renders the soID column and still labels the 'Name' field as 'Name. What am I doing wrong?
Does anyone have an example for how to create a Dynamically Templated Listview with prefernces page to specify which columns & column order)? Also the listview would also have Edit, delete and insert options if possible. And uses the n-tier approach with Bus Layer and does NOT use LINQ.
How to change the values in gridview on text change of templated control without databind again?the value of templated text boxes should change If i change the value of one of the templated textbox then accordingly(By mathematical calculations) the vlaues of all tempated textboxes should also change.
I have a ObjectDataSource and a ListView referencing it.
I have created a Templated User Control (see: http://msdn.microsoft.com/en-us/library/36574bf6.aspx) and placed it in the ListView's InsertItemTemplate It has one template <ContentTemplate>. Inside that template, I've defined a couple of server controls with their properties = '<%# Bind("colName") #>'.
I've been assigned changes to make to an ASP.NET project. The WebForm I'm working on needs to dynamically display and hide controls in response to user actions.
So far, so good. My approach would be to create a little JavaScript. However, on this page, the markup is part of a template for a Telerik control (which I know nothing about). I'm not sure the ramifications of this. Can I still use JavaScript for templated markup?
I tried to insert some existing JavaScript in the page. The first problem I have is my use of <%= ControlName.ClientID %>, which produces an error because the name of the control in the template is not seen to exist by ASP.NET.
Is there another way to do this, or am I just going to run into more problems?
I have a CheckBoxList that displays a list of category names. Its datasource fields contain the category name, rate, its HTML page identifier "pagea1234.html" among other selected fields.The CheckBoxList's DataTextField = "Name" and the DataValueField = "Rate". I would like the DataTextField - "Name" to display as a hyperlink to its respective html page ie = "www.abc.com/page_A1234.html"
I've been reading about it and abstracted both M and C from MVC. My question here is just to help me understend how the View works, here it goes:
I've got 2 tables: List and Item, both of them have repositories and controllers, in the Lists View i want it to be possible for me to add and remove Items. The Item will not have a page of its own, everything will be done in the List Create and Edit page. I tried using EditorFor, DisplayFor, they dont seem right. Is it? How could I do that?
Curiosity: if I added another table: PossibleItems, which contains the possible values for the Items (o rly?) and will have its own page for including possible items, how would it go? This might seem like an exercise from a MVC Tutorial book .
I have a dynamic Table which contain 8 rows and 8 Colums
Table t = new Table(); TableRow rr = new TableRow(); TableCell cc = new TableCell(); and in the each Cell CC I add a dynamic Button(Or Linkbtn) LinkButton LB1 = new LinkButton(); LB1.Text = "AM"; LB1.ID ="Link1"; cc.Controls.Add(LB1); rr.Cells.Add(cc); LB1.Click += new EventHandler(LB1_Click); t.Rows.Add(rr);
i have a table with 8 rows , 8 colums and each cell contain a LinkButton (which diffrent in IDs) I want to add Lable in the same cell of this LinkBtn(LB1) which it clicked but I cann't What shoud I write here?
im creating dynamic buttons on page load and on the click event of button1 handlere iam creating more buttons this is going fine but on click event of button 2 work is not done so how to maintain a chain of creation of button on click events
I am fairly new to asp.net programming. I found this custom control that uses ajax to update the contents of the control and it is working perfectly. However, I need to access some of the asp.net labels and images in the databound event so I can set their values/properties appropriately, and am not sure how to go about adding additional code or accessing these in my custom control (I have been googling endlessly with no results). My code for the custom control is below.
Imports System Imports System.Text Imports System.IO Imports System.Collections Imports System.Web Imports System.Web.UI Imports System.Web.UI.WebControls Imports Microsoft.VisualBasic Namespace myControls Public Class AjaxDivView Inherits CompositeDataBoundControl Implements ICallbackEventHandler Private _itemTemplate As ITemplate ''' <summary> ''' The ItemTemplate is used to format each item from the data source. ''' </summary> <TemplateContainer(GetType(DivViewItem))> _ <PersistenceMode(PersistenceMode.InnerProperty)> _ Public Property ItemTemplate() As ITemplate Get Return _itemTemplate End Get Set(ByVal value As ITemplate) _itemTemplate = value End Set End Property ''' <summary> ''' Register Javascript ''' </summary> Protected Overrides Sub OnPreRender(ByVal e As System.EventArgs) 'Register Refresh Function Dim eRef As String = Page.ClientScript.GetCallbackEventReference(Me, Nothing, "AjaxDivView_Result", "'" & Me.ClientID & "'", "AjaxDivView_Error", False) Dim refreshFunc As String = "function AjaxDivView_Refresh() {" & eRef & "}" Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), Me.UniqueID, refreshFunc, True) MyBase.OnPreRender(e) End Sub ''' <summary> ''' Iterate through the data items and instantiate each data item in a template. ''' </summary> Protected Overloads Overrides Function CreateChildControls(ByVal dataSource As System.Collections.IEnumerable, ByVal dataBinding As Boolean) As Integer Dim counter As Integer = 0 For Each dataItem As Object In dataSource Dim contentItem As New DivViewItem(dataItem, counter) _itemTemplate.InstantiateIn(contentItem) Controls.Add(contentItem) counter = counter + 1 Next DataBind(False) Return counter End Function ''' <summary> ''' Render this control's contents in a Ul tag ''' </summary> Protected Overrides ReadOnly Property TagKey() As System.Web.UI.HtmlTextWriterTag Get Return HtmlTextWriterTag.Div End Get End Property ''' <summary> ''' Render my contents to a string and send the result back to the client ''' </summary> Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult Dim builder As New StringBuilder() Dim sWriter As New StringWriter(builder) Dim hWriter As New HtmlTextWriter(sWriter) Me.RenderContents(hWriter) Return builder.ToString() End Function ''' <summary> ''' Whenever I get called through AJAX, rebind my data. ''' </summary> Public Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent Me.DataBind() End Sub Public Class DivViewItem Inherits WebControl Implements IDataItemContainer Private _dataItem As Object Private _index As Integer Public ReadOnly Property DataItem() As Object Implements System.Web.UI.IDataItemContainer.DataItem Get Return _dataItem End Get End Property Public ReadOnly Property DataItemIndex() As Integer Implements System.Web.UI.IDataItemContainer.DataItemIndex Get Return _index End Get End Property Public ReadOnly Property DisplayIndex() As Integer Implements System.Web.UI.IDataItemContainer.DisplayIndex Get Return _index End Get End Property Protected Overrides ReadOnly Property TagKey() As System.Web.UI.HtmlTextWriterTag Get Return HtmlTextWriterTag.Div End Get End Property Public Sub New(ByVal dataItem As Object, ByVal index As Integer) _dataItem = dataItem _index = index End Sub End Class End Class End Namespace