创建视图张贴空对象
应该是一个容易回答的问题。 我想在视图中创建一个对象。包含该对象的类由一个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中重新组装对象。
希望这会有所帮助!
要返回UserExtended类的新实例
返回查看(新的UserExtended());
,而不是回到你作为参数
回报用户
这并不真的有什么关系的事实,比如他得到的行动是空的... – 2010-08-10 10:13:01
Yngvebn是正确的 – arame3333 2010-08-10 10:18:49
@ 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; }
太棒了!我认为答案很简单,但这是学习MVC,恕我直言,你必须犯的错误之一。 – arame3333 2010-08-10 10:20:00
所以真的:)很高兴我能帮忙! – 2010-08-10 10:24:44
过去3天我也有同样的问题!简直不敢相信!哈哈!谢谢! – BrunoSalvino 2010-10-07 20:10:57