我有一个模型和一个可枚举的模型,我将它放在asp.net mvc3中的视图模型中,就像这样。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
namespace FuelPortal.Models.DBModels
{
public class UserDBModel
{
public int userId { get; set; }
[Required, Display(Name = "User Name")]
public string userName { get; set; }
[Required, Display(Name = "Password")]
public string password { get; set; }
[Required, Display(Name = "First Name")]
public string firstName { get; set; }
[Required, Display(Name = "Last Name")]
public string lastName { get; set; }
[Required, Display(Name = "Email")]
public string email { get; set; }
[Display(Name = "Phone")]
public string phone { get; set; }
[Display(Name = "Account Expiration Date(Optional)")]
public DateTime expireDate { get; set; }
[Display(Name = "Password Expiration Date")]
public DateTime passwordExpireDate { get; set; }
[Display(Name = "Last Date Modified")]
public DateTime DateModified { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FuelPortal.Models.DBModels;
namespace FuelPortal.Models.ViewModels
{
public class UserMaintenanceViewModel
{
public UserDBModel user = new UserDBModel();
public List<UserDBModel> userList = new List<UserDBModel>();
}
}
现在我强烈键入一个视图以使用视图模型。
@model FuelPortal.Models.ViewModels.UserMaintenanceViewModel
<div class="frmBG">
@using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "wrapperData" }))
{
<h5>Create New User</h5>
<br />
<table cellpadding="2" cellspacing="10" border="0">
<tr><td>
<div class="editor-label">
@Html.LabelFor(model => model.user.userName)
</div></td><td>
<div class="editor-field">
@Html.EditorFor(model => model.user.userName)
@Html.ValidationMessageFor(model => model.user.userName)
</div></td></tr>
<tr><td>
<div class="editor-label">
@Html.LabelFor(model => model.user.password)
</div></td><td>
<div class="editor-field">
@Html.PasswordFor(model => model.user.password)
@Html.ValidationMessageFor(model => model.user.password)
</div></td></tr>
<tr><td>
<div class="editor-label">
@Html.LabelFor(model => model.user.firstName)
</div></td><td>
<div class="editor-field">
@Html.EditorFor(model => model.user.firstName)
@Html.ValidationMessageFor(model => model.user.firstName)
</div></td></tr>
<tr><td>
<div class="editor-label">
@Html.LabelFor(model => model.user.lastName)
</div></td><td>
<div class="editor-field">
@Html.EditorFor(model => model.user.lastName)
@Html.ValidationMessageFor(model => model.user.lastName)
</div></td></tr>
<tr><td>
<div class="editor-label">
@Html.LabelFor(model => model.user.email)
</div></td><td>
<div class="editor-field">
@Html.EditorFor(model => model.user.email)
@Html.ValidationMessageFor(model => model.user.email)
</div></td></tr>
<tr><td>
<div class="editor-label">
@Html.LabelFor(model => model.user.phone)
</div></td><td>
<div class="editor-field">
@Html.EditorFor(model => model.user.phone)
@Html.ValidationMessageFor(model => model.user.phone)
</div></td></tr>
<tr><td>
<div class="editor-label">
@Html.LabelFor(model => model.user.expireDate)
</div></td><td>
<div class="editor-field">
@Html.EditorFor(model => model.user.expireDate)
@Html.ValidationMessageFor(model => model.user.expireDate)
</div></td></tr>
<tr><td></td><td>
<p>
<input type="submit" value="" class="create" /><input type="button" value="" class="close_tab"/>
</p></td></tr>
</table>
}
</div>
由于某些原因,在帖子上它不会填充视图模型中的对象。因此,当我创建一个post动作时,(UserMaintenanceViewModel模型)的所有值都为null。像这样......
[HttpPost]
public ActionResult CreateUser(UserMaintenanceViewModel model)
{
try
{
/// TODO: Add insert logic here
var result = repository.insertNewUser(Session["UserId"].ToString(), model.user.UserName, model.user.Password, model.user.FirstName,
model.user.LastName, model.user.Email, model.user.Phone, model.user.ExpireDate);
// If result > 0 user insert successful
此外,如果我切换到通过(FormCollection表单)获取回发,我看到html元素的名称是“user.UserName”而不是预期的“UserName”。我非常感谢任何指导,我觉得我应该能够做到这一点。
非常感谢
答案 0 :(得分:3)
如果你有一个复杂的视图模型,那么你必须确保在构造函数中创建一个对象的实例。然后,您可以向任何子对象添加信息,因为它现在有一个实例。
public class MyViewModel
{
public MyViewModel()
{
Customer= new CustomerViewModel ();
Address = new AddressViewModel();
}
public int OrderNumber{ get; set; }
public CustomerViewModel Customer { get; set; }
public AddressViewModel Address { get; set; }
}
}