On my page I want to include a list of members in a drop down list but I am not sure how exactly I could do this.
How would I populate a drop down list with the members that I am passing with the controller?
This is my controller
//Add Event
public ActionResult CreateEvent()
{
var members = db.ClubMembers.ToList();
return View(members);
}
//Add Event
[HttpPost]
public ActionResult CreateEvent(ClubEvent incomingEvent)
{
try
{
if (ModelState.IsValid)
{
using (var db = new UltimateDb())
{
db.ClubEvents.Add(incomingEvent);
db.SaveChanges();
}
return RedirectToAction("Index");
}
return View();
}
catch
{
return View();
}
}
This is the view I will be using
#model ultimateorganiser.Models.ClubEvent
#{
ViewBag.Title = "CreateEvent";
}
<h2>CreateEvent</h2>
#using (Html.BeginForm())
{
#Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>ClubEvent</h4>
<hr />
#Html.ValidationSummary(true, "", new { #class = "text-danger" })
#*Event Title*#
<div class="form-group">
#Html.LabelFor(model => model.EventTitle, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.EventTitle, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.EventTitle, "", new { #class = "text-danger" })
</div>
</div>
#*Event Description*#
<div class="form-group">
#Html.LabelFor(model => model.EventDesc, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.EventDesc, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.EventDesc, "", new { #class = "text-danger" })
</div>
</div>
#*Event Type*#
<div class="form-group">
#Html.LabelFor(model => model.eventType, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EnumDropDownListFor(model => model.eventType, htmlAttributes: new { #class = "form-control", #id = "dropdown" })
#Html.ValidationMessageFor(model => model.eventType, "", new { #class = "text-danger" })
</div>
</div>
#*Add People*#
#*<div class="form-group">
Add Members
<div class="col-md-10">
Drop Down List of members will go here
</div>
</div>*#
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
The best way to pass data between views and action methods are view models.We will go that way.
First create a new view model for the create view.
public class CreateEventVm
{
public string EventDescription {set;get;}
public List<SelectListItem> Members {set;get;}
public int MemberId {set;get;}
}
and in your GET action
public ActionResult Create()
{
var vm = new CreateEventVm();
var db= new UltimateDb();
vm.Members =db.Members.Select(s=> new SelectListItem
{ Value=s.Id.ToString(),
Text = s.Name
}).ToList();
return View(vm);
}
And your create razor view which is strongly typed to our new CreateEventVm
#model CreateEventVm
#using(Html.BeginForm())
{
<label>Description</label>
#Html.TextBoxFor(s=>s.EventDescription)
<label>Member</label>
#Html.DropDownListFor(s=>s.MemberId,Model.Members,"Select one")
<input type="submit" />
}
And in your HttpPost action method
[HttpPost]
public ActionResult Create(CreateEventVm model)
{
if(ModelState.IsValid)
{
using (var db = new UltimateDb())
{
var event = new ClubEvent();
event.EventDescription = model.EventDescription;
//Set other properties also from view model.
db.ClubEvents.Add(event);
db.SaveChanges();
}
// Redirect to another action after successful save (PRG pattern)
return RedirectToAction("SavedSuccessfully");
}
vm.Members =db.Members.Select(s=> new SelectListItem
{ Value=s.Id.ToString(),
Text = s.Name
}).ToList();
return View(vm);
}
Related
I have a problem with my controller. It accepts null.
First of all I've got such ViewModel
public class FilmVM
{
public Film Film { get; set; }
public IEnumerable<Image> Images { get; set; } = new List<Image>();
public IEnumerable<SimilarFilm> SimilarFilms { get; set; } = new List<SimilarFilm>();
}
Controller looks like
public ActionResult Edit(FilmVM film)
{
_unitOfWork.Film.Update(film);
return RedirectToAction("Index");
}
Index action looks like
public ActionResult Index(int? page)
{
int pageSize = Constaints.Constaint.FilmsCount;
int pageNumber = page ?? 1;
var films = _unitOfWork.Film.GetDatas();
return View(films.ToPagedList(pageNumber, pageSize));
}
Models in VM are defaults like Guid, name, etc.
View model looks like
#model GuessTheMovieApp.ViewModels.FilmVM
#{
ViewBag.Title = "Edit";
}
<div class="wrapper">
<h2>Edit</h2>
#using (Html.BeginForm("Edit", "Films", FormMethod.Post, new { #class = "form-edit-film" }))
{
#Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Editing Film</h4>
#Html.ValidationSummary(true, "", new { #class = "text-danger" })
#Html.Partial("EditFilm", Model.Film)
<div class="form-group">
<div class="form-group__input">
<input type="submit" value="Save" class="btn btn-success" />
</div>
</div>
</div>
}
</div>
<div>
#Html.ActionLink("Back to List", "Index")
</div>
Partial View looks like
#model GuessTheMovieApp.Models.DataBase.Film
<div class="form-horizontal">
<h4>Film</h4>
<hr />
#Html.HiddenFor(model => model.FilmId)
<div class="form-group">
#Html.LabelFor(model => model.Name, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.Name, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.Name, "", new { #class = "text-danger" })
</div>
</div>
<div class="form-group">
#Html.LabelFor(model => model.Year, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.Year, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.Year, "", new { #class = "text-danger" })
</div>
</div>
<div class="form-group">
#Html.LabelFor(model => model.Genre, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.Genre, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.Genre, "", new { #class = "text-danger" })
</div>
</div>
</div>
they are common, I think.
I saw similar question on stackoverflow, but it didn't helped me. So I'm asking if someone knows an answer on such question, please help.
UPD
Figured out how to work with this by changing Action Edit to this format
public ActionResult Edit(Film films, IEnumerable<Image> images, IEnumerable<SimilarFilm> similarFilms)
{
_unitOfWork.Film.Update(new FilmVM { Film = films, Images = images, SimilarFilms = similarFilms });
_unitOfWork.Save();
return RedirectToAction("Index");
}
I don't think you can prevent your controller from accepting null at the parameter level, the best you can do is to do a null check on the object coming in before you call your _unitofWork
try to use the same model for view, partial view and action. You can use FilmVm as well as any another model. For example you can use Film in this case
#model GuessTheMovieApp.ViewModels.Film
.....
<partial name="EditFilm" />
......
and action
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Film film)
{
var filmVm= new FilmVm { Film=film}
.....
}
When I pass the view model to the method it crashes but it works with FormCollection or not passing anything to the onpost method.
[HttpPost]
[AutoValidateAntiforgeryToken]
public ActionResult Update(CustomerInformation model)
{
if (ModelState.IsValid)
{
//save
var UpdateRecord = customerServices.Update(model);
if (UpdateRecord)
{
return RedirectToAction("Details");
}
}
}
#model Customer.Models.CustomerInformationDetails
#using Customer.Models.CustomerInformation
#{
var customerName = Model.Name;
ViewData["Title"] = customerName;
}
<h1>Edit information for #customerName</h1>
<hr />
#using (Html.BeginForm("Update",
"Customer",
FormMethod.Post))
{
<div class="form-group">
#Html.Label("Introduction", "Introduction:", htmlAttributes: new { #class = "control-label col-md-10" })
<div class="col-md-10">
#Html.EditorFor(model => model.Introduction, new { htmlAttributes = new { #class = "form-control" } })
</div>
</div>
<div class="form-group">
#Html.Label("Contact Person", "Contact Person:", htmlAttributes: new { #class = "control-label col-md-10" })
<div class="col-md-10">
#Html.EditorFor(model => model.ContactPerson, new { htmlAttributes = new { #class = "form-control" } })
</div>
</div>
<div class="form-group">
<input type="submit" value="Update" class="btn btn-primary"></input>
</div>
}
Add
return View(model)
outside of your if statement.
Currently if it fails it has nothing to return.
This question already has answers here:
Asp.Net MVC: Why is my view passing NULL models back to my controller?
(2 answers)
Closed 4 years ago.
I am new to ASP.Net and I am sure this is a very basic question. I have a employee crud views . In create view i was created viewModel to pass different two model . One Model display emloyee and another model connect to db and retrieve all departments to my view . But I can't retrieve data to my employee create controller area. Vs send this err Abc.Models.MyViewModel.Employee.get returned null. On Debug.Print(employee.Employee.Name) line.
Here my Models ;
Employee.cs
public class Employee
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Surname { get; set; }
[Required]
public string phoneNumber { get; set; }
public string Detail { get; set; }
//Bu kısımda veri tabanı ilişkisi 1 to many olacak
public int DepartmentId { get; set; }
public Department Department { get; set; }
}
Department.cs
public class Department
{
public int Id { get; set; }
public string depName { get; set; }
public List<Employee> Employees { get; set; }
}
MyViewModel.cs
public class MyViewModel
{
public Employee Employee { get; set; }
public IEnumerable<Department> departments { get; set; }
}
I added dropboxlist on my create.cshtml area with MyViewModel and i can't retrieve all data on my controller .
Here my EmployeeController.cs ;
// GET: Employee/Create
[HttpGet]
public ActionResult Create()
{
MyViewModel viewModel = new MyViewModel();
Employee emp = new Employee();
viewModel.Employee = emp;
viewModel.departments = db.Departments;
return View(viewModel);
}
// POST: Employee/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see https://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(/*[Bind(Include = "Id,Name,Surname,phoneNumber,Department,Detail")]*/ MyViewModel employee)
{
//string emName = employee.Employee.Name;
Debug.Print(employee.Employee.Name);
if (ModelState.IsValid)
{
db.Employees.Add(employee.Employee);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(employee);
}
Here Create.cshtml "this html codes are in #using (Html.BeginForm()");
#model TelefonRehberi.Models.MyViewModel
<div class="form-horizontal">
<h4>Employee</h4>
<hr />
#Html.ValidationSummary(true, "", new { #class = "text-danger" })
<div class="form-group">
#Html.LabelFor(model => model.Employee.Name, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.Employee.Name, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.Employee.Name, "", new { #class = "text-danger" })
</div>
</div>
<div class="form-group">
#Html.LabelFor(model => model.Employee.Surname, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.Employee.Surname, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.Employee.Surname, "", new { #class = "text-danger" })
</div>
</div>
<div class="form-group">
#Html.LabelFor(model => model.Employee.phoneNumber, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.Employee.phoneNumber, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.Employee.phoneNumber, "", new { #class = "text-danger" })
</div>
</div>
<!--Dropdown List Olacak-->
<div class="form-group">
#Html.LabelFor(model => model.Employee.Department, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
<!--Burada zorlandım umarım doğru kullanım olmuştur.-->
#Html.DropDownListFor(m => m.Employee.Department, new SelectList(Model.departments.Select(i => i.depName)), " - Select or Add -", new { #class = "form-control" })
#Html.ValidationMessageFor(model => model.Employee.Department, "", new { #class = "text-danger" })
</div>
</div>
<!--Dropdown List Sonu Ayarlamalar Yapılacak.-->
<div class="form-group">
#Html.LabelFor(model => model.Employee.Detail, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.Employee.Detail, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.Employee.Detail, "", new { #class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
Add Form and try to do
#using (Html.BeginForm("ActionName","ControllerName", FormMethod.Post))
{
<div class="form-horizontal">
<!--add your other code here -->
<!--add your other code here -->
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
HTML Forms are required, when you want to collect some data from the site visitor. For example, during user registration you would like to collect information such as name, email address, credit card, etc.
A form will take input from the site visitor and then will post it to a back-end application such as CGI, ASP Script or PHP script etc. The back-end application will perform required processing on the passed data based on defined business logic inside the application.
There are various form elements available like text fields, textarea fields, drop-down menus, radio buttons, checkboxes, etc.
Ok, you were really close. In Create method you need to create Employee employee and not MyViewModel employee. So in controller just put this Create method:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Employee employee)
{
Debug.Print(employee.Name);
if (ModelState.IsValid)
{
//db.Employees.Add(employee);
//db.SaveChanges();
return RedirectToAction("Index");
}
return View(employee);
}
Then binding will work just fine and you will get your employee from the form.
Just in case bellow is also the code for the form in the Create View.
<h2>Create</h2>
#using (Html.BeginForm("Create", "Employee", FormMethod.Post))
{
<div class="form-horizontal">
<h4>Employee</h4>
<hr />
#Html.ValidationSummary(true, "", new { #class = "text-danger" })
<div class="form-group">
#Html.LabelFor(model => model.Employee.Name, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.Employee.Name, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.Employee.Name, "", new { #class = "text-danger" })
</div>
</div>
<div class="form-group">
#Html.LabelFor(model => model.Employee.Surname, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.Employee.Surname, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.Employee.Surname, "", new { #class = "text-danger" })
</div>
</div>
<div class="form-group">
#Html.LabelFor(model => model.Employee.phoneNumber, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.Employee.phoneNumber, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.Employee.phoneNumber, "", new { #class = "text-danger" })
</div>
</div>
<!--Dropdown List Olacak-->
<div class="form-group">
#Html.LabelFor(model => model.Employee.Department, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
<!--Burada zorlandım umarım doğru kullanım olmuştur.-->
#Html.DropDownListFor(m => m.Employee.Department, new SelectList(Model.departments.Select(i => i.depName)), " - Select or Add -", new { #class = "form-control" })
#Html.ValidationMessageFor(model => model.Employee.Department, "", new { #class = "text-danger" })
</div>
</div>
<!--Dropdown List Sonu Ayarlamalar Yapılacak.-->
<div class="form-group">
#Html.LabelFor(model => model.Employee.Detail, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.Employee.Detail, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.Employee.Detail, "", new { #class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
My ViewModel always returns null and don't know why. Can someone look at my code and check what is wrong here and why my filled model with data from view returns to controller as null?
public class PaintballWorkerCreateViewModel
{
public PaintballWorker PaintballWorker { get; set; }
public PaintballWorkerHourlyRate HourlyRate { get; set; }
}
Controller
public ActionResult Create()
{
PaintballWorkerCreateViewModel model = new PaintballWorkerCreateViewModel()
{
PaintballWorker = new PaintballWorker(),
HourlyRate = new PaintballWorkerHourlyRate()
{
Date = DateTime.Now
}
};
return View(model);
}
[HttpPost]
[PreventSpam(DelayRequest = 20)]
[ValidateAntiForgeryToken]
public ActionResult Create(PaintballWorkerCreateViewModel paintballWorker)
{
(...)
}
View, even added HiddenFor IDs (which aren't created in GET function in controller).
#model WerehouseProject.ViewModels.PaintballWorkerCreateViewModel
#{
ViewBag.Title = "Utwórz pracownika";
Layout = "~/Views/Shared/_Layout_Paintball.cshtml";
}
<h2>Dodawanie pracownika</h2>
#using (Html.BeginForm("Create", "PaintballWorkers", FormMethod.Post))
{
#Html.AntiForgeryToken()
<div class="form-horizontal">
<hr />
#Html.ValidationSummary(true, "", new { #class = "text-danger" })
#Html.HiddenFor(model => model.PaintballWorker.Active)
#Html.HiddenFor(model => model.PaintballWorker.MoneyGot)
#Html.HiddenFor(model => model.PaintballWorker.PaintballWorkerID)
#Html.HiddenFor(model => model.HourlyRate.Date)
#Html.HiddenFor(model => model.HourlyRate.PaintballWorkerID)
#Html.HiddenFor(model => model.HourlyRate.PWHourlyRateID)
<div class="form-group">
#Html.LabelFor(model => model.PaintballWorker.Imie, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.PaintballWorker.Imie, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.PaintballWorker.Imie, "", new { #class = "text-danger" })
</div>
</div>
<div class="form-group">
#Html.LabelFor(model => model.PaintballWorker.Nazwisko, htmlAttributes: new { #class = "control-label col-md-2" })
(...)
<div class="form-group">
#Html.LabelFor(model => model.HourlyRate.HourlyRate, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.HourlyRate.HourlyRate, new { htmlAttributes = new { #class = "form-control", #type = "number", #min = "0.1", #step = "0.1", #value = "10" } })
#Html.ValidationMessageFor(model => model.HourlyRate.HourlyRate, "", new { #class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Dodaj pracownika" class="btn btn-primary" />
</div>
</div>
</div>
}
<div>
#Html.ActionLink("Powrót do listy", "Index", new object { }, new { #class = "btn btn-default" })
</div>
Your code looks fine.. looks like it's reference is being lost somewhere.. have you tried to remove the [PreventSpam(DelayRequest = 20)] attribute? So your controller would be like this:
public ActionResult Create()
{
PaintballWorkerCreateViewModel model = new PaintballWorkerCreateViewModel()
{
PaintballWorker = new PaintballWorker(),
HourlyRate = new PaintballWorkerHourlyRate()
{
Date = DateTime.Now
}
};
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(PaintballWorkerCreateViewModel paintballWorker)
{
(...)
}
You are not posting the form correctly. Since the attributes are hidden, they are null by default.
After posting your controller does not see anything since the elements are hidden. Therefore it is null.
Use the extension method #Html.TextboxFor instead. Mvc viewengine will render the textbox and then you can put some values and post them.
you also need to make sure that you have mapped the route correctly in your code.
your problem may be because of naming conflict, that is the parameter name of the post action may not be the same as the property name in your viewmodel
Kindly follow the below link:
https://forums.asp.net/t/1670962.aspx?ViewModel+in+post+action+is+null
In that it specified solution and route cause for the problem clearly.
Note : I also had the same problem long back and solved it in the same way as mentioned. Hope it will be useful for you too
thanks
Karthik
I have a Model (Register.cs) that contains 2 other Model (ProfileMeta ,ProfileDetail) as fields. How do I bind these 2 Model fields in my Controller class? When I name my 2 field objects the same as the Model file names, as I've seen. When I reference them in ProfileController, they're seen as types and not objects.
Error 26 An object reference is required for the non-static field, method, or property 'ContosoUniversity.Models.ProfileMeta.password.get' C:\Projects\DatingSite\datingSite\ContosoUniversity\Controllers\ProfileController.cs 63 40 DatingSiteInitial
However, when I rename them to different names, and refer them like so in ProfileController, I get the compilation error below:
" doesn't exist in the current context"
Models/Register.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace ContosoUniversity.Models
{
public class Register
{
public ProfileMeta ProfileMeta { get; set; }
public ProfileDetail ProfileDetail { get; set; }
}
}
Controllers/ProfileController.cs:
// POST: Profiles/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ProfileMeta,ProfileDetail")] Register register)
{
if (ModelState.IsValid)
{
//Add 1 ProfileMeta row and 1 linked ProfileDetail row
ProfileMeta profileMeta = new ProfileMeta();
//How to refer to bound: ProfileMeta, ProfileDetail fields inside Register.cs?
profileMeta.Username = ProfileMeta.Username;
profileMeta.password = ProfileMeta.password;
profileMeta.ID = ProfileDetail.ID;
db.ProfileDetails.Add(ProfileDetail);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(profileDetail);
}
Views/Profile/Create.cshtml:
#model ContosoUniversity.Models.Register
#{
ViewBag.Title = "Create";
}
<h2>Create</h2>
#using (Html.BeginForm())
{
#Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Profile</h4>
<hr />
#Html.ValidationSummary(true, "", new { #class = "text-danger" })
<div class="form-group">
#Html.LabelFor(model => model.ProfileMeta.Username, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.ProfileMeta.Username, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.ProfileMeta.Username, "", new { #class = "text-danger" })
</div>
</div>
<div class="form-group">
#Html.LabelFor(model => model.ProfileMeta.password, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.ProfileMeta.password, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.ProfileMeta.password, "", new { #class = "text-danger" })
</div>
</div>
<div class="form-group">
#Html.LabelFor(model => model.ProfileDetail.Age, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.ProfileDetail.Age, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.ProfileDetail.Age, "", new { #class = "text-danger" })
</div>
</div>
...
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
#Html.ActionLink("Back to List", "Index")
</div>
#section Scripts {
#Scripts.Render("~/bundles/jqueryval")
}