Can we create a View with model in sitecore without creating a Controller?
Problem: To create an MVC 'View' bound with a 'Model' but without creating any controller in Sitecore MVC 7.2.
###Solution:
We can create a view rendering passing a model to the view without any controller. Follow the below steps to create a sample view passing a custom model without using a controller.
Version used: Sitecore 7.2 with MVC 5.1
Create Model class in C# .NET(LoginModel.cs). This is the model which we are going to pass it to a view.
LoginModel.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Sitecore.MyProjSolution.Website.Models.LoginModel { public class LoginModel { public string UserName { get; set; } public string Password { get; set; } } }
Create model in Sitecore.
- Go to Layout->Models
- Right click and create a model item with name 'MyModel'
- In the Model type field enter the model class assembly path and namespace path separated by comma as shown below. Sitecore.MyProjSolution.Website.Models.LoginModel,Sitecore.MyProjSolution.Website
Create view rendering in Sitecore
go to layout->Renderings
right click and create a View Rendering. Give some name to the view rendering
After creating the view rendering, under the Data section, assign values to its fields as shown below.
'Path' -> (path to the view file i.e., the .cshtml file):say "Views/Account/Login.cshtml"
Sample Login.cshtml:
@model Sitecore.MyProjSolution.Website.Models.LoginModel <div class="dropdown-menu my-login-dropdown" style="padding:20px;"> @using (Html.BeginForm("Login", "Account", FormMethod.Post)) { @Html.TextBoxFor(m => m.UserName, new { @class = "form-control", @Placeholder = "Username" }) @Html.PasswordFor(m => m.Password, new { @class = "form-control", @Placeholder = "Password" }) <input type="submit" id="btnLogin" class="btn btn-default" value="Submit" /> } </div>
'Model' -> CLick on 'Insert link' and select the sitecore model which we have created in the step 2 i.e, MyModel.
PlaceHolder -> select the placeHolder in which you want to render this view(placeHolder as per the Layout). Say ‘phLogin’.
Below is the a sample layout file(SampleLayout.cshtml).
<!DOCTYPE html> <html lang="en"> <head> <title>Sample Page</title> </head> <body> <div class="header"> @Html.Sitecore().Placeholder("phHeader") </div> <div class="Body"> @Html.Sitecore().Placeholder("phLogin") </div> <div class="footer"> @Html.Sitecore().Placeholder("phFooter") </div> </body> </html>
In the above tutorial, just a blank Model class is passed without any data in it. This is normally useful to create Html submit Forms which are bound to Models using the @Html.BeginForm of MVC, but if you want to populate the model at Sitecore and pass that model data to the view go through the below tutorial.
How to pass a Sitecore populated Model from sitecore to a .NET MVC view