所以我有一个客户模型,需要与AspNetUsers有一对一或零关系。我希望它的工作方式是让用户注册。然后,如果他们想要,请转到example.com/Customers/Create并创建一个他们可以编辑或删除的客户记录。用户只能拥有一个或零个客户记录。
他们的问题是,当用户创建了一个Customer时,Customer视图为用户提供了创建另一个客户的选项,如果他这样做,则会发生错误。
如何防止这种情况?如果客户已经创建了一个客户,则应自动为他们提供创建客户的选项:
我还必须阻止此服务器端。
型号:
public class Customer
{
public int CustomerID { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }
public string Name { get; set; }
}
OnModelCreating:
modelBuilder.Entity<ApplicationUser>()
.HasOptional(m => m.Customer)
.WithRequired(m => m.ApplicationUser)
.Map(p => p.MapKey("UserId"))
在控制器上创建方法(POST)
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "CustomerID,Name")] Customer customer)
{
if (ModelState.IsValid)
{
UserManager<ApplicationUser> UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
var CurrentUser = UserManager.FindById(User.Identity.GetUserId());
customer.ApplicationUser = CurrentUser;
db.Customers.Add(customer);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(customer);
}
我应该在索引视图中更改哪些内容,以便不会创建新的&#39;用户创建客户时的选项,在“创建”视图中,阻止任何人创建客户。
指数:
@model IEnumerable<WebApplication8.Models.Customer>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.CustomerID }) |
@Html.ActionLink("Details", "Details", new { id=item.CustomerID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.CustomerID })
</td>
</tr>
}
</table>
创建视图:
@model WebApplication8.Models.Customer
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Customer</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<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">
<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")
}
答案 0 :(得分:1)
你需要围绕这个代码块的if语句
@Html.ActionLink("Create New", "Create")
但我真的建议您使用视图模型而不是customer
实体。