Custom ViewModel With MVC 2 Strongly Typed HTML Helpers Return Null Object On Create?
Mar 22, 2010
I am having a trouble while trying to create an entity with a custom view modeled create form. Below is my custom view model for Category Creation form.
[code]....
When i click on save button, it doesnt bind the category for me because of i am using custom view model and strongly typed html helpers like that
I was wondering if it is possible to create a custom strongly typed HTML Helper in ASP.NET MVC 2? Creating a regular (read not-strongly-typed) helper is straightforward but i am having difficulty creating strongly typed versions. For example, I would like to create a DatePickerFor html helper...
I am using the MetaDataType DataAnnotation to validate my models in an MVC2 application. I also apply the DisplayFormat annotation so that currencies and dates are formatted the way I want. This method works for the original Html Helpers such as :
[Code]....
When I used the new strongly typed helpers:
[Code]....
the formatting never gets applied. Is there a way around this?
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)}
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
I have a products table whereby I want to return a single row via a product id and use it as a data object.
I have used a .xsd dataset and a product class where I return a dataset and add the values into the product object that I created but I don't like having to write code like
"Product[0].ProductDescription" to get the product description. Is there a way of returning is straight as an object rather than a dataset?
using System; namespace MvcApplication.Helpers { public class InputlHelper { public static string Input(this HtmlHelper helper, string name, string text) { return String.Format("<input name='{0}'>{1}</input>", name, text); } } }
Now how to turn it into a strongly typed helper method InputFor Like it is in the framework?I don't need the Html.TextBoxFor method, I know it exists. I am just curious in how to implement this behavior myself and used this as a simple example.PS. I was looking in the mvc source code but couldn't find a trace of this mysterious TextBoxFor. I only found TextBox. Am I looking at the wrong code?
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.
Note: I will use the term "ViewModel" for both the ViewModel in WPF/Silverlight and the strongly-typed ViewData in ASP.Net MVC in the following text.
I would like to create both ASP.Net MVC and WPF/Silverlight clients for the same project (in other words, against the same DataModel), should I create a common ViewModel project or a separate ViewModel for each client technology?
I would like to believe a common ViewModel is the right thing to do, but the need to create Dependent Properties or JSON strings make it seem to be incompatible.
Maybe another solution is to put the common part of the ViewModel into the DataModel layer?
I've got a problem with ASP.NET mvc stongly typed helpers.Here is example of wrong behavior:
[Code]....
will generate following inputs:
[Code]....
As you see generated name is wrong, because of wrong algorithm of extracting property name from lambda.The only way to avoid this bug is to create PartialView and pass item as its context.May be somebody knows other solutions? Do you consider it a bug or right behavior?
If I wanted to create a custom HTML helper and take advantage of the new in-built templating feature, how would I do that? It appears the templating features are internal?
Just a quick question really but with the strongly typed views where MVC can autobind form fields to the propertys of an object I define, how does this work when supporting multiple forms on the same view?Is it possible to have two objects with different properties,
Object1 { Name, Age } Object2 { StartDate, EndDate }
Then on the view have two seperate forms, one for each object and the controller can work out which object it is to post back because of the form which eventually gets posted back?
The strongly typed helpers are now written like this -
<%= Html.TextBoxFor(model => model.State) %>
I need to add a default value to a textbox. In the prior version of Asp.Net MVC it was easy to assign a default value. I thought doing the following would work in MVC 2-
<%= Html.TextBoxFor(model => model.CountyId, new{ value = 840 })%>
This, however, does not work for me in Asp.Net MVC 2. The value is still blank for the textbox. I want to make sure that this isn't some random error that I am having. Has anyone else encountered the same problem? I have searched and searched to find more information on the default property for the html helpers in MVC 2, but I can't find anything. Does anyone out there know how to correctly assign a default value to a textbox in Asp.Net MVC 2?
I have a view that is strongly typed and its model is of type LogOnModel. That LogOnModel has anotated properties like this one:
[Required(ErrorMessage = "Please enter your password")] [DataType(DataType.Password)] [Display(Name = "Password", Description = "Your secreet password")] public string Password { get; set; }
All of them has Display anotation with Display.Descripion property set. I want to create HtmlHelper extension method that will output <span> containg the value of Display.Description property. So for example if I called my extension method DescriptionFor than this code:
<%: Html.DescriptionFor(m => m.Password) %>
should produce following html: <span>Your secreet password</span>
Okay, here's something that I could easily do the hard way and manually wire up each form element and save it to a datatable in memory, but there has to be a more efficient way to do it.
Here's what I have:
1. A strongly typed datatable and tableadapter in a XSD name Orders
2. A formview control which currently is connected to an ODS connected to the Orders tableadapter, this makes it easy to wire up the databindings for each form field in design view
I would like to:
- bind the the formview to an instance of the strongly typed datatable, and then save the dt to a session object without interacting with the actual database
- load forms on subsequent pages from the dt in session
- ultimately save the dt info to an actual database table on the third page
I've read some solutions where a custom class is created, but to me this seems like almost as much work as wiring up the form field to the table columns manually in code.
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?