European ASP.NET MVC 4 and MVC 5 Hosting

BLOG about ASP.NET MVC 3, ASP.NET MVC 4, and ASP.NET MVC 5 Hosting and Its Technology - Dedicated to European Windows Hosting Customer

European ASP.NET MVC 6 Hosting - HostForLIFE.eu :: How to Duplicate Controller Names in ASP.NET MVC Areas ?

clock November 11, 2014 07:02 by author Peter

By convention, ASP.NET MVC 6 applications use HomeController to discuss with the controller that handles requests created to the root of the application. this can be designed by default with the subsequent route registration:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

If you choose to partition your application using the ASP.NET MVC Areas feature, it’s commonplace that you simply would need calls to the root of every space to be handled employing a similar convention, via a HomeController.  However, if you add a HomeController to a part (for instance, an Admin area), you'll find yourself faced with this exception:

Multiple types were found that match the controller named ‘Home’. This can happen if the route that services this request (‘{controller}/{action}/{id}’) does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the ‘MapRoute’ method that takes a ‘namespaces’ parameter.

The request for ‘Home’ has found the following matching controllers:
AreaDemo.Areas.Admin.Controllers.HomeController
AreaDemo.Controllers.HomeController

Unfortunately by default you can not have duplicate controller names in ASPNET MVC Areas (or between a part and also the root of the application). fortunately, the fix for this can be pretty easy, and also the exception describes the step you wish to require.  Once you’ve added a part, you may have 2 completely different places (by default) wherever routes are defined: one in your root application and one in your area registration. you may need to regulate each of them to specify a namespace parameter. the root registration will change to one thing like this:
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    namespaces: new string[] {"AreaDemo.Controllers"}
);

Likewise, at intervals the AdminAreaRegistration.cs class, the default RegisterArea methodology feels like this:
public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Admin_default",
        "Admin/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional}
        );
}

To adjust it to support a default HomeController and namespaces, it ought to be updated like so:
public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Admin_default",
        "Admin/{controller}/{action}/{id}",
        new { controller="Home", action = "Index", id = UrlParameter.Optional},
        new string[] {"AreaDemo.Areas.Admin.Controllers"}
        );
}

With that changes in place, you must currently be ready to support the HomeController convention at intervals your MVC Areas, with duplicate controller names between areas and also the root of the applying.



ASP.NET MVC 6 Hosting - HostForLIFE.eu :: Updating Multiple Row Using ASP.NET MVC and Entity Framework

clock October 7, 2014 12:11 by author Peter

In this post we are going to update multiple row using ASP.NET MVC and Entity Framework.  Just follow these steps below:
1. First we need to create a project.
Go to Menu File > New > Project > Select ASP.NET MVC web application > Entry Application Name > Click OK.


2. Add a Database.
Go to Solution Explorer > Right Click on App_Data folder > Add > New item > Select SQL Server Database Under Data > Enter Database name > Add. 
Open Database and add a table for update operation. Here I am creating a table called Contacts.

3. Add Entity Data Model.
Go to Solution Explorer > Right Click on Project Name from Solution Explorer folder > Add > New item > Select ADO.net Entity Data Model under data > Enter model name > Add.
A popup window will come (Entity Data Model Wizard) > Select Generate from database > Next > Chose your data connection > select your database > next > Select tables > enter Model Namespace > Finish.

After Creating Data model, we have to modify our generated entity(table) for Apply validation for required fields.

Here we need to modify contact.cs fileOpen file and modify as for enable validation.
namespace UpdateMultiRecord
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    public partial class Contac
  {
        [Required]        
        public int ContactID { get; set; }
        [Required]
        public string ContactPerson { get; set; }       
 [Required]
        public string Contactno { get; set; }
        public string EmailID { get; set; }
    }
}


Here I am using Home controller index action.

Get Action      
[HttpGet]
        public ActionResult Index()
        {
            List<Contact> model = new List<Contact>();
            using (MyDatabaseEntities dc = new MyDatabaseEntities())
            {
                model = dc.Contacts.ToList();
            }
            return View(model);

        }     
Post Action       
 [HttpPost]
        public ActionResult Index(List<Contact> list)
        {
           if (ModelState.IsValid)
           {
               using (MyDatabaseEntities dc = new MyDatabaseEntities())
                {
                    foreach (var i in list)
                    {

                        var c = dc.Contacts.Where(a =>                                  
                        a.ContactID.Equals(i.ContactID)).FirstOrDefault();
                        if (c != null)
                        {
                            c.ContactPerson = i.ContactPerson;
                            c.Contactno = i.Contactno;
                            c.EmailID = i.EmailID;
                        }
                    }
                    dc.SaveChanges();
                }
                ViewBag.Message = "Successfully Updated.";
                return View(list);
            }
            else
            {
               ViewBag.Message = "Failed ! Please try again.";
                return View(list);
            }
        }       
Create View for Update Multiple Row.
@model List<UpdateMultiRecord.Contact>
@{
    ViewBag.Title = "Update multiple row at once Using MVC 4 and EF ";
}
@using (@Html.BeginForm("Index","Home", FormMethod.Post))
{
    <table>
            <tr>
                <th></th>               
                <th>Contact Person</th>
                <th>Contact No</th>
                <th>Email ID</th>
            </tr>
        @for (int i = 0; i < Model.Count; i++)
        {
            <tr>               
                <td> @Html.HiddenFor(model => model[i].ContactID)</td>
                <td>@Html.EditorFor(model => model[i].ContactPerson)</td>
                <td>@Html.EditorFor(model => model[i].Contactno)</td>
                <td>@Html.EditorFor(model => model[i].EmailID)</td>
            </tr>
        }
    </table>
    <p><input type="submit" value="Save" /></p>
    <p style="color:green; font-size:12px;">
        @ViewBag.Message
    </p>
}
 @section Scripts
     {@Scripts.Render("~/bundles/jqueryval")}

Code: @Scripts.Render("~/bundles/jqueryval") will enable client side validation. Finally, Run Application. Edit Contact Details and Click Save button.



ASP.NET MVC 6 Hosting Europe - HostForLIFE.eu :: Creating Hybrid SPA with ASP.NET MVC, WebAPI and AngularJs

clock October 2, 2014 08:10 by author Peter

The main benefit I see in following the SPA design principles for developing rich, complex web applications is the “stateful”ness we get. For complex web application, it may be too idealistic to have just one “full” initial HTTP request to get a page, and then subsequent async calls to load further pages or data. However, we can do it module-wise i.e. certain parts of the web app follow SPA design, others may or may not follow SPA design. This is referred to as mini-spa or hybrid spa. Using AngularJs in ASP.NET MVC 6 Hosting, I have come up with a sample application which follows SPA design principles. I’m using angular route module ngRoute along with angular directive ngView to define routes – controller & view associated with each route. It is essentially MVC pattern on the client-side. Moreover, our app is now route-driven on client-side. (The browser back and fro buttons are supported)

In the sample web app, we have 2 modules. In each module, user can filter results and view/edit the record. [NOTE: using mvc music store database from CodePlex.

For each module, I've defined corresponding angular module :
ngModule musicAlbumsApp for music module
ngModule movieDvdsApp for movie module

Route configuration for music module

(function (app) {
    var routeConfig = function ($routeProvider) {
        $routeProvider.when("/", {
            controller: "musicAlbumListController",
            templateUrl: window.miniSpaApp.rootUrl + "MusicAlbums/List",
            reloadOnSearch: false
        }).when("/:genreId", {
            controller: "musicAlbumListController",
            templateUrl: window.miniSpaApp.rootUrl + "MusicAlbums/List",
            reloadOnSearch: false
        }).when("/Detail/:id", {

            controller: "musicAlbumDetailController",
            templateUrl: window.miniSpaApp.rootUrl + "MusicAlbums/Detail",
            reloadOnSearch: false        }).when("/Edit/:id", {
            controller: "musicAlbumEditController",
            templateUrl: window.miniSpaApp.rootUrl + "MusicAlbums/Edit",
            reloadOnSearch: false
        }).otherwise({ redirectTo: "/" });
    };
    routeConfig.$inject = ['$routeProvider'];
    app.config(routeConfig);
})(angular.module("musicAlbumsApp"));

Each route maps to an angular controller and a view/template. 

In our main page (MusicAlbums - Index View), we include the angular scripts and define our container div using ngView directive to load different views

@section HeadContent
{
   @Scripts.Render("~/bundles/angularMusicAlbums")
}
<div data-ng-app="musicAlbumsApp" data-ng-view="" data-ng-cloak="">
</div>


Similarly, for movie module we've defined it's route configuration and container div using ngView directive.



ASP.NET MVC 6 Hosting - HostForLIFE.eu :: How to Solve HTTP Error 403.14 and Error 404 When Deploying ASP.NET MVC 6 website on IIS

clock September 17, 2014 08:59 by author Peter

I have build a ASP.NET 4.5 and ASP.NET MVC 6 web app which works fine locally (IIS Express & dev server) but once I deploy it to my web server, sometimes it throws Error:

  • 403.14 - Forbidden (The Web server is configured to not list the contents of this directory.)
  • 404 - Not Found (The resource you are looking for has been removed, had its name changed, or is temporarily unavailable)

SOLUTION

  • Make sure the Application pool targets correct version of .NET framework (i.e .NET Framework v4.0.30319 for .NET 4.5 and 4.5.2)
  • Make sure You have setup the website as an application in IIS
  • Make sure the Pipeline mode of IIS Application pool is "Integrated"
  • Check UrlRoutingModule-4.0 is added in the modules of that website.
  • (To do that, open list of added modules by clicking "Modules" against your website, and see if the module "UrlRoutingModule-4.0" is added or not). If not, then add a module by clicking "Add Managed Module" button, where select System.Web.Routing.UrlRoutingModule as a Module type, and give "UrlRoutingModule-4.0" as its name)
  • Make sure you have following element added in system.webServer section of website's web.config

<system.webServer>
<modules runAllManagedModulesForAllRequests="true"></modules> 
</system.webServer>

In most cases of HTTP Error 403.14, or 404, above are the possible causes and fixes. 



About HostForLIFE.eu

HostForLIFE.eu is European Windows Hosting Provider which focuses on Windows Platform only. We deliver on-demand hosting solutions including Shared hosting, Reseller Hosting, Cloud Hosting, Dedicated Servers, and IT as a Service for companies of all sizes.

We have offered the latest Windows 2016 Hosting, ASP.NET Core 2.2.1 Hosting, ASP.NET MVC 6 Hosting and SQL 2017 Hosting.


Tag cloud

Sign in