I tried upgrading the solution to MVC3 in VS2010 by using an upgrader tool I don't know what it does exactly but it didn't work. My "System.Web.Mvc" is not being recognized in my project. Is there anything specific I should be doing with my web.config? I don't quite understand the underlying details about all the places I should be referencing dll's or what "binding" even means and when I should use it inside the web.config So I have to ask, what is the best method for upgrading to MVC3 and what have you done that works?
I am working on 2 projects. One that is in MVC2 that is an existing application, and then I have the MVC3 application that I am trying to build. After hearing that I could get intellisense for my work in VS2010, I went to install the VS tools for MVC3. Now my old project will not work. I'm not trying to move my MVC2 project to MVC3 right now either.
I didn't actually change anything about the MVC2 project, but now I get this error whenever I try to open a page:
Server Error in '/' Application.
Parser Error Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.
Parser Error Message: The type 'System.Web.Mvc.ViewMasterPage' is ambiguous: it could come from assembly 'C:WindowsassemblyGAC_MSILSystem.Web.Mvc2.0.0.0__31bf3856ad364e35System.Web.Mvc.dll' or from assembly 'C:WindowsMicrosoft.NetassemblyGAC_MSILSystem.Web.Mvcv4.0_3.0.0.0__31bf3856ad364e35System.Web.Mvc.dll'. Please specify the assembly explicitly in the type name.
[HttpPost] public ActionResult Edit(int id, FormCollection fc) { Movie movie = ( from m in _ctx.Movie.Include("MovieActors") where m.MovieID == id select m ).First(); MovieActorViewModel movieActor = new MovieActorViewModel(movie); if (TryUpdateModel(movieActor)) { _ctx.ApplyPropertyChanges(movieActor.Movie.EntityKey.EntitySetName, movieActor.Movie); _ctx.SaveChanges(); } return View(movieActor); }
However, I am not sure how to test this, and in general would much rather have the method take a typed model like:[HttpPost] public ActionResult Edit(MovieActorViewModel movieActor) Is this possible? What changes to my MovieActorViewModel class do I need to make in order to enable this? That class looks like this:
public class MovieActorViewModel { public Movie Movie { get; set; } public Actor Actor { get; set; } public PublisherDealViewModel(Movie movie) { this.Movie = movie; this.Actor = ( from a in this.Movie.Actors where a.ActorID == 1 select a ).First(); } }
The view is typed (inherits ViewPage) simple:
<% using (Html.BeginForm()) {%> Movie Title: <%= Html.TextBoxFor(model=>model.Movie.Title) %><br/> Actor Name: <%= Html.TextBoxFor(model=>model.Actor.Name) %> <% } %>
Table Product Product Id Product Name Table ProductSupplier ProductSupplierId ProductId SupplierId Table Supplier SupplierId SupplierName
I have the above 3 tables in my database, ProductSupplier is the lookup table. Each Product can have many suppliers. I am using Entity Framework. Using Web Forms it was fairly easy to display a Product on a web page and bind a repeater with the suppliers information. Also, with Web Forms it was easy to Add new Product and suppliers, the linkage seemed easy.
How do you do this sort of functionality in MVC? In the Create View below, I want to be able to Add the Supplier as well. Is there a better approach that I might be missing here? This is how I did it with Web Forms. Beyond the code below I am totally lost. I can show data in a list and also display the Suppliers for each Product, but how do I Add and Edit. Should I break it into different views? With Web Forms I could do it all in one page.
namespace MyProject.Mvc.Models { [MetadataType(typeof(ProductMetaData))] public partial class Product { public Product() { // Initialize Product this.CreateDate = System.DateTime.Now; } } public class ProductMetaData { [Required(ErrorMessage = "Product name is required")] [StringLength(50, ErrorMessage = "Product name must be under 50 characters")] public object ProductName { get; set; } [Required(ErrorMessage = "Description is required")] public object Description { get; set; } } public class ProductFormViewModel { public Product Product { get; private set; } public IEnumerable<ProductSupplier> ProductSupplier { get; private set; } public ProductFormViewModel() { Product = new Product(); } public ProductFormViewModel(Product product) { Product = product; ProductSupplier = product.ProductSupplier; } } } ProductRepository public Product GetProduct(int id) { var p = db.Product.FirstOrDefault(por => por.ProductId == id); p.ProductSupplier.Attach(p.ProductSupplier.CreateSourceQuery().Include("Product").ToList()); return p; } Product Create View <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyProject.Mvc.Models.ProductFormViewModel>" %> <%= Html.ValidationSummary("Please correct the errors and try again.") %> <% using (Html.BeginForm()) {%> <fieldset> <legend>Fields</legend> <div class="editor-label"> <%= Html.LabelFor(model => model.Product.ProductId) %> </div> <div class="editor-field"> <%= Html.TextBoxFor(model => model.Product.ProductId) %> <%= Html.ValidationMessageFor(model => model.Product.ProductId) %> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.Product.ProductName) %> </div> <div class="editor-field"> <%= Html.TextBoxFor(model => model.Product.ProductName) %> <%= Html.ValidationMessageFor(model => model.Product.ProductName) %> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.Product.Description) %> </div> <div class="editor-field"> <%= Html.TextBoxFor(model => model.Product.Description) %> <%= Html.ValidationMessageFor(model => model.Product.Description) %> </div> <p> <input type="submit" value="Create" /> </p> </fieldset> <% } %>
I want to have two partial views, one for SEARCH and one for SEARCHRESULTS. I want to update SEARCHRESULTS when the "Search" Button is clicked on the SEARCH partial view form. SEARCHRESULTS needs to have the form data fed to it from the SEARCH partial view. I'm not totally sure how to go about this. Can I update the SEARCHRESULTS partial view from my SEARCH partial view's Controller action?
I have a table in my database with a one to many relationship to another table, which has a relationship to a third table:
[Code].....
This seems to work fine. My question to you good folks: Is there a correct way to do this? I tried following the making a custom model binder per the blog link I posted above but it didn't work (there was an issue with reflection, the code expected certain properties to exist) and I needed to get something going ASAP. PS - I tried to cleanup the code to hide specific information, so beware I may have hosed something up.
However if I turn off the second one, unobtrusive, I would still expect that client validation would work. However it seems to me that it still posts back fully to the server instead of client side validation only. Is this a bug in MVC3?
I am having a nightmare with getting a Dropdownlist control to work correctly in my MVC application. I am trying to get a set of values out of an enumeration into SelectListItem which I then present to the DropDownList control as its source. The issue is that I can get the thing to render but the selected value is never set and to top it off when the form is posted the value passed across is 0 instead of the actual value. In the View (Razor Code):
HTML4Strict Code: @Html.DropDownList("UserRole", new SelectList(Enum.GetValues(typeof(enumUserRoleUserManagement)), user.UserRole), new { @onchange = "submitForm(" + i + ")" }) in the Controller: Csharp Code: ViewData["RL"] = new SelectList(userActionsModel.GenerateCombo().AsEnumerable(), "Value", "Text"); And Finally in the model: Csharp Code: public IEnumerable<SelectListItem> GenerateCombo() { var enumerationValues = Enum.GetValues(typeof(enumUserRoleUserManagement)); var enumerationNames = Enum.GetNames(typeof(enumUserRoleUserManagement)); List<SelectListItem> list = new List<SelectListItem>(); foreach (var value in Enum.GetValues(typeof(enumUserRoleUserManagement))) { SelectListItem selectList = new SelectListItem { Text = value.ToString(), Value = value.ToString() }; list.Add(selectList); } //SelectList selectList = new SelectList(list); return list;}
I have burned soooo much time on this, I will be indebted to anyone that provides a solution.
In mvc1, we can write an attribute as '[NewPath("mainpage", Controller = "BrowsePdts", Action = "Index")]' before Action for 'mappaththen we can do sth. as 'mappath' in webformI just want a navigate in the top of page , as ' book >> magazine >> fashion 'but what the attribute change to in mvc3?
with creating a submit button?What I need to do is1. Take a parameter from a text field2. Send that parameter to a function to get data when the user clicks submit3. return that data back to the calling page.
I am using mvc 3 unobtrusive concept for validation . It is working fine at client/server side.The problem is that it wont clear until I hit the server again.
Is there any extra code i have to write to clear validation summary ?
We wanted to upgrade our projects from ASP.NET MVC 2 to 3. Most of our tests succeeded, but there are some that fail on ValueProviderFactories.Factories.GetValueProvider(context).
Here is a simple test class that ilustrates the problem.
[TestFixture] public class FailingTest { [Test] public void Test() { var type = typeof(string); // any controller AuthenticationController c = new AuthenticationController(); var httpContext = new Mock<HttpContextBase>(); var context = c.ControllerContext = new ControllerContext(httpContext.Object, new RouteData(), c);
I've recently taken an existing ASP.NET 3.5 web forms application that was upgraded to .NET 4 last year (and has been running fine) and configured it to also run ASP.NET MVC3 following Scott Hanselman's blog post: Integrating ASP.NET MVC 3 into existing upgraded ASP.NET 4 Web Forms applications. It works well and I've successfully begun to introduce views based on Razor and the existing aspx pages continue to work.
The one thing that has stopped working, however, is a custom HttpHandler (our load balancer hits a specific address to ensure the application is available - the handler is for that address). The web.config has always declared the handler in the system.web section like this:
Now we're testing post-MVC3 and I'm getting an exception that reads:
The controller for path '/system/heartbeat.aspx' was not found or does not implement IController. I have defined a RegisterRoutes method in my Global.asax and that method is called from the Application_Start. Within RegisterRoutes I've got the IgnoreRoute declarations from Hanselman's blog:
which I thought was to prevent the Routing system from taking anything with an extension of .aspx. I can reproduce the issue in VS2010 as I debug, and the deployment environment is running IIS 6. What can I do to prevent the Routing system from trying to handle that address so the custom handler can do it's thing?
[Required(ErrorMessageResourceName = "ValidationError_Required", ErrorMessageResourceType = typeof(Resources.Resources))] public string Title { get; set; } public class LRequiredAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute [code]...
I need to create dynamic fields (textbox,combo) based on the entries in an XML file
I will read the ATTRIBUTES XML tag and must create the type of control and add validations to it. Can someone say how to use MVC3 to create dynamic controls, becos i cannot have different class for models as the XML file will change for each screen and i will have one screen which will generate this page for me...
I just setup new vs2010 ultimate environment.And now trying to learn mvc3 pattern using http://www.asp.net/mvc/tutorials/getting-started-with-mvc3-part1-cs.But the IDE has no mvc3 option there.i have already installed mvc3 packege.
I have a view with a textbox and a button. I want to take the textbox and take the contents of what a user types in and put it as a "Get" variable in the URL. Does anyone have a simple example of this? I want it to print into a url like this: /Profiles/Search?searchstring=hello