创建视图张贴空对象

创建视图张贴空对象

问题描述:

应该是一个容易回答的问题。 我想在视图中创建一个对象。包含该对象的类由一个User类和一个密码组成。 当我点击提交按钮时,Controller会为密码和用户选取空值。 查看下面的容器类,控制器和视图;创建视图张贴空对象

public class UserExtended 
{ 
    public UserITOC User { get; set; } 
    public string Password { get; set; } 
} 

    [Authorize] 
    public ActionResult Create() 
    { 
     return View(new UserExtended()); 
    } 

    // 
    // POST: /Dinners/Create 

    [Authorize(Roles = "Administrator")] 
    [HttpPost] 
    public ActionResult Create(UserExtended user) 
    { 
     if (ModelState.IsValid) 
     { 
      // Create user in the User datatable 
      SqlUsersRepository sqlRepository = new SqlUsersRepository(); 
      ITOCEntities db = new ITOCEntities(); 
      db.UserITOCs.AddObject(user.User); 

      // Create user as an authenticated user within the Reader role. 
      int i = user.User.EmailAddress.IndexOf('@') - 1; 
      string userName = user.User.EmailAddress.Substring(0, i); 
      string email = user.User.EmailAddress; 
      Membership.CreateUser(userName, user.Password, email); 
      Roles.AddUserToRole(userName, "Reader");    // Automatically assigned as a Reader 
     } 
     return View(new UserExtended()); 
    } 
“%>

创建

<h2>Create</h2> 

<% using (Html.BeginForm()) {%> 
    <%: Html.ValidationSummary(true) %> 

    <fieldset> 
     <legend>Fields</legend> 

     <div class="editor-label"> 
      <%: Html.LabelFor(model => model.User.Forename) %> 
     </div> 
     <div class="editor-field"> 
      <%: Html.EditorFor(model => model.User.Forename)%> 
      <%: Html.ValidationMessageFor(model => model.User.Forename)%> 
     </div> 

     <div class="editor-label"> 
      <%: Html.LabelFor(model => model.User.Surname) %> 
     </div> 
     <div class="editor-field"> 
      <%: Html.EditorFor(model => model.User.Surname)%> 
      <%: Html.ValidationMessageFor(model => model.User.Surname)%> 
     </div> 

     <div class="editor-label"> 
      <%: Html.LabelFor(model => model.User.EmailAddress) %> 
     </div> 
     <div class="editor-field"> 
      <%: Html.EditorFor(model => model.User.EmailAddress)%> 
      <%: Html.ValidationMessageFor(model => model.User.EmailAddress)%> 
     </div> 

     <div class="editor-label"> 
      <%: Html.LabelFor(model => model.Password) %> 
     </div> 
     <div class="editor-field"> 
      <%: Html.EditorFor(model => model.Password)%> 
      <%: Html.ValidationMessageFor(model => model.Password) %> 
     </div> 

     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 

<% } %> 

<div> 
    <%: Html.ActionLink("Back to List", "Index") %> 
</div> 

非常简单的解决方案的目标:从

public ActionResult Create(UserExtended user) 

更改您的行动签名

public ActionResult Create(UserExtended UserExtended) 

这样ModelBinder就会知道如何从Request中重新组装对象。

希望这会有所帮助!

+1

太棒了!我认为答案很简单,但这是学习MVC,恕我直言,你必须犯的错误之一。 – arame3333 2010-08-10 10:20:00

+1

所以真的:)很高兴我能帮忙! – 2010-08-10 10:24:44

+0

过去3天我也有同样的问题!简直不敢相信!哈哈!谢谢! – BrunoSalvino 2010-10-07 20:10:57

要返回UserExtended类的新实例

返回查看(新的UserExtended());

,而不是回到你作为参数

回报用户

+0

这并不真的有什么关系的事实,比如他得到的行动是空的... – 2010-08-10 10:13:01

+0

Yngvebn是正确的 – arame3333 2010-08-10 10:18:49

+0

@ arame3333你尝试只是返回用户var – 2010-08-10 10:26:50

我有一个非常类似的问题,但在我的情况发现,我不得不匹配数据库表名而不是类型名称

  • 类型的名称:NonTradingDay
  • 数据库表名:dbo.NonTradingDays(已经使用复数

创建方法:

[HttpPost] 
public ActionResult Create(NonTradingDay NonTradingDays) 
{ 
    if (ModelState.IsValid) 
    { 
     db.NonTradingDay.Add(NonTradingDays); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(NonTradingDays); 
} 

我曾试过'NonTradingDay',但仍然有空;然后我查看了数据库表名,尝试了'NonTradingDays'并且进行了映射(参数不再为空)。

认为这是因为我有数据库上下文为:

public DbSet<NonTradingDay> NonTradingDay { get; set; } 

不是:

public DbSet<NonTradingDay> NonTradingDays { get; set; }