C# 为什么我的表中充满了只有Id的空对象?
我的电影和客户有多对多的关系。但每次我创建一个新客户并在表单中从下拉列表中为该客户选择电影时,会创建一个新客户,但电影槽为空,然后当我在数据库中检查我的电影表时,除了新电影id和我的CustomerMovie表(多对多关系表)外,还会创建一个空值的新电影将有此新客户Id和新电影Id。为什么通过创建新客户,新电影将使用空值创建,并且不会将现有电影添加到客户 另外,我对Razor@Html标记不是很熟悉,所以我只对循环使用normal,至少目前对我来说,它更有意义 这是我的客户模型C# 为什么我的表中充满了只有Id的空对象?,c#,html,asp.net-mvc,razor,C#,Html,Asp.net Mvc,Razor,我的电影和客户有多对多的关系。但每次我创建一个新客户并在表单中从下拉列表中为该客户选择电影时,会创建一个新客户,但电影槽为空,然后当我在数据库中检查我的电影表时,除了新电影id和我的CustomerMovie表(多对多关系表)外,还会创建一个空值的新电影将有此新客户Id和新电影Id。为什么通过创建新客户,新电影将使用空值创建,并且不会将现有电影添加到客户 另外,我对Razor@Html标记不是很熟悉,所以我只对循环使用normal,至少目前对我来说,它更有意义 这是我的客户模型 public
public class Customer
{
public Customer()
{
this.Movies = new HashSet<Movie>();
}
public int id { get; set; }
[StringLength(255)]
public String Name { get; set; }
public bool IsSubscribedToNewsletter { get; set; }
public int CurrentMembershipTypeId { get; set; }
public virtual MembershipType CurrentMembershipType { get; set;}
public virtual ICollection<Movie> Movies { get; set; }
}
这是CustomPerform视图:
@model WebApplication2.ViewModel.CustomerViewModel
@*<h4>
<b>ID:</b> @ViewBag.id <br />
<b>Name:</b> @ViewBag.Name <br />
<b>Addon:</b> @ViewBag.Addon <br />
</h4>
<h2>CustomerForm</h2>
<form action="/Customer/CustomerForm" method="post">
<table>
<tr>
<td>Id:</td>
<td><input id="CustomerId" type="text" name="CustomerId" /></td>
</tr>
<tr>
<td>Name:</td>
<td><input id="CustomerName" type="text" name="CustomerName" /></td>
</tr>
<tr>
<td>IsSubscribedToNewLetter:</td>
<td><input id="CustomerisSubscribedToNewsLetter" type="text" name="CustomerisSubscribedToNewsLetter" /></td>
</tr>
<tr>
<td>MembershipType:</td>
<td>
<select id="MembershipTypeId" name="MembershipTypeId">
@foreach (var membershipType in @Model.MembershipTypes)
{
<option value=@membershipType.Id>
@*@membershipType.SignupFee*@
@membershipType.Id
</option>
}
</select>
</td>
</tr>
<tr>
<td>Movie:</td>
<td>
<select id="MovieId" name="MovieId">
@*@Html.ListBoxFor(model => model.MovieId, Model.AllMovies, new { size = 8 })*@
@foreach (var movie in Model.Movies)
{
<option value=@movie.Id>
@movie.Name
</option>
}
</select>
</td>
</tr>
</table>
<input type="submit" value="save"/>
</form>
@model WebApplication2.ViewModel.CustomerViewModel
@*
ID:@ViewBag.ID
名称:@ViewBag.Name
插件:@ViewBag.Addon
顾客表演
身份证件:
姓名:
ISSUBSCRIBEDTONEWLETER:
会员资格类型:
@foreach(@Model.MembershipTypes中的var membershipType)
{
@*@membershipType.SignupFee*@
@membershipType.Id
}
电影:
@*@ListBoxFor(model=>model.MovieId,model.AllMovies,new{size=8})*@
@foreach(Model.Movies中的var movie)
{
@电影,名字
}
以下是我的客户观点:
@model IEnumerable<WebApplication2.Models.Customer>
@{
ViewBag.Title = "Customers";
}
<p>
@Html.ActionLink("Create New", "CustomerForm")
</p>
<table>
<tr>
<th></th>
<th>Number</th>
<th>Name</th>
<th>Subscription</th>
<th>MembershipType signup fee</th>
<th>Movies</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.id }) |
@Html.ActionLink("Details", "Details", new { id = item.Name }) |
@*@Html.ActionLink("Delete", "Delete", new { id = item.id }, new { onclick = "return confirm('Are you sure you wish to delete this article?');" })*@
@*<p><a href="/Customer/Edit/@item.id">Edit Customer</a></p>*@
<form method="post" action="/Customer/delete/@item.id">
<input type="submit" value="delete" />
</form>
</td>
<td>
@Html.DisplayFor(modelItem => item.id)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.IsSubscribedToNewsletter)
</td>
<td>
@Html.DisplayFor(modelItem => item.CurrentMembershipType.SignupFee)
</td>
<td>
@foreach (var movie in item.Movies)
{
@movie.Name
}
</td>
</tr>
}
</table>
@model IEnumerable
@{
ViewBag.Title=“客户”;
}
@ActionLink(“新建”、“自定义性能”)
数
名称
订阅
会员类型注册费
影视
@foreach(模型中的var项目)
{
@ActionLink(“编辑”,“编辑”,新的{id=item.id})|
@ActionLink(“详细信息”,“详细信息”,新的{id=item.Name})|
@*@ActionLink(“Delete”,“Delete”,new{id=item.id},new{onclick=“return confirm('你确定要删除这篇文章吗?');“}”)*@
@* *@
@DisplayFor(modeleItem=>item.id)
@DisplayFor(modelItem=>item.Name)
@DisplayFor(modeleItem=>item.IsSubscribedToNewsletter)
@DisplayFor(modelItem=>item.CurrentMembershipType.SignupFee)
@foreach(item.Movies中的var movie)
{
@电影,名字
}
}
如果要将值发回控制器,请不要在视图中使用@foreach
。改为使用(…)的@。这样,您的输入就得到了正确的索引。我试图对其进行索引,但它会用Model.Movies[I].Name而不是实际名称填充下拉列表:@for(int I=0;I<@Model.Movies.Count();I++{Model.Movies[I].Name}@Model.Movies[i].Id
和@
应该这样做(与名称
相同)感谢您的回复,当我将@it加上红色下划线时,错误表示无法对IEnumerableI的表达式应用带[]的索引,该表达式已更改为列为@Model.Movies.ToList()[i].Id和相同的名称,它看起来不错,下拉列表看起来也不错,但它仍然没有向客户添加电影,正如我在上面的原始帖子中解释的一样
public class CustomerController : Controller
{
// private ICustomerRepository iCustomerRepository;
ICustomerRepository iCustomerRepository = new CustomerRepository(new CustomerContext());
IMembershipTypeRepository iMembershipTypeRepository = new MembershipTypeRepository(new CustomerContext());
IMovieRepository imovieRepository = new MovieRepository(new CustomerContext());
CustomerContext CustomerContext = new CustomerContext();
// GET: Customers
public ActionResult Customer()
{
var customers = CustomerContext.Customers.Include(c => c.Movies);
var Customers = customers.ToList();
return View(Customers);
}
//public ActionResult CustomerForm(Customer Customer)
public ActionResult CustomerForm(Customer customer)
{
var membershipTypes = iMembershipTypeRepository.GetMembershipTypes();
var Movie = imovieRepository.GetMovies();
ViewBag.Message = "Customers form is going to display: ";
CustomerViewModel customerViewModel = new CustomerViewModel
{
MembershipTypes = CustomerContext.MembershipTypes,
Movies = CustomerContext.Movies,
};
if (customer.IsSubscribedToNewsletter != true)
ViewBag.Addon = "Selected";
else
ViewBag.Addon = "Not Selected";
return View(customerViewModel);
}
public ActionResult Edit(int id)
{
Customer Customer = new Customer();
Customer = iCustomerRepository.GetCustomerByID(id);
CustomerViewModel customer = new CustomerViewModel
{
MembershipTypes = CustomerContext.MembershipTypes,
Movies = CustomerContext.Movies,
Customer = Customer
};
return View(customer);
}
[HttpPost]
public ActionResult CustomerForm(int CustomerId, string CustomerName, bool CustomerisSubscribedToNewsLetter, int membershipTypeId, Movie movie)
{
Customer customer = new Customer();
// Movie Movie = new Movie();
customer.id = CustomerId;
customer.Name = CustomerName;
customer.IsSubscribedToNewsletter = CustomerisSubscribedToNewsLetter;
customer.CurrentMembershipTypeId = membershipTypeId;
customer.Movies.Add(movie);
movie.Customers.Add(customer);
iCustomerRepository.InsertCustomer(customer);
// imovieRepository.InsertMovie(movie);
iCustomerRepository.Save();
// imovieRepository.Save();
return RedirectToAction("Customer");
}
[HttpPost]
public ActionResult Edit(int CustomerId, string CustomerName, bool CustomerIsSubscribedToNewsLetter, int membershipTypeId, IList<Movie> movie)
{
Customer Customer = new Customer();
Customer.id = CustomerId;
Customer.Name = CustomerName;
Customer.IsSubscribedToNewsletter = CustomerIsSubscribedToNewsLetter;
Customer.CurrentMembershipTypeId = membershipTypeId;
Customer.Movies = movie;
iCustomerRepository.UpdateCustomer(Customer);
iCustomerRepository.Save();
//CustomerContext.Movies.AddRange(movie);
imovieRepository.Save();
CustomerContext.SaveChanges();
return RedirectToAction("Customer");
}
[HttpPost]
public ActionResult Delete(int id)
{
Customer customer = new Customer();
customer = iCustomerRepository.GetCustomerByID(id);
iCustomerRepository.DeleteCustomer(customer.id);
iCustomerRepository.Save();
return RedirectToAction("Customer");
}
}
public class MovieController : Controller
{
IMovieRepository iMovieRepository = new MovieRepository(new CustomerContext());
ICustomerRepository iCustomerRepository = new CustomerRepository(new CustomerContext());
CustomerContext CustomerContext = new CustomerContext();
public ActionResult Movie()
{
var Movies = iMovieRepository.GetMovies();
//var movies = CustomerContext.Movies.Include(s => s.Customers);
return View(Movies);
}
}
@model WebApplication2.ViewModel.CustomerViewModel
@*<h4>
<b>ID:</b> @ViewBag.id <br />
<b>Name:</b> @ViewBag.Name <br />
<b>Addon:</b> @ViewBag.Addon <br />
</h4>
<h2>CustomerForm</h2>
<form action="/Customer/CustomerForm" method="post">
<table>
<tr>
<td>Id:</td>
<td><input id="CustomerId" type="text" name="CustomerId" /></td>
</tr>
<tr>
<td>Name:</td>
<td><input id="CustomerName" type="text" name="CustomerName" /></td>
</tr>
<tr>
<td>IsSubscribedToNewLetter:</td>
<td><input id="CustomerisSubscribedToNewsLetter" type="text" name="CustomerisSubscribedToNewsLetter" /></td>
</tr>
<tr>
<td>MembershipType:</td>
<td>
<select id="MembershipTypeId" name="MembershipTypeId">
@foreach (var membershipType in @Model.MembershipTypes)
{
<option value=@membershipType.Id>
@*@membershipType.SignupFee*@
@membershipType.Id
</option>
}
</select>
</td>
</tr>
<tr>
<td>Movie:</td>
<td>
<select id="MovieId" name="MovieId">
@*@Html.ListBoxFor(model => model.MovieId, Model.AllMovies, new { size = 8 })*@
@foreach (var movie in Model.Movies)
{
<option value=@movie.Id>
@movie.Name
</option>
}
</select>
</td>
</tr>
</table>
<input type="submit" value="save"/>
</form>
@model IEnumerable<WebApplication2.Models.Customer>
@{
ViewBag.Title = "Customers";
}
<p>
@Html.ActionLink("Create New", "CustomerForm")
</p>
<table>
<tr>
<th></th>
<th>Number</th>
<th>Name</th>
<th>Subscription</th>
<th>MembershipType signup fee</th>
<th>Movies</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.id }) |
@Html.ActionLink("Details", "Details", new { id = item.Name }) |
@*@Html.ActionLink("Delete", "Delete", new { id = item.id }, new { onclick = "return confirm('Are you sure you wish to delete this article?');" })*@
@*<p><a href="/Customer/Edit/@item.id">Edit Customer</a></p>*@
<form method="post" action="/Customer/delete/@item.id">
<input type="submit" value="delete" />
</form>
</td>
<td>
@Html.DisplayFor(modelItem => item.id)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.IsSubscribedToNewsletter)
</td>
<td>
@Html.DisplayFor(modelItem => item.CurrentMembershipType.SignupFee)
</td>
<td>
@foreach (var movie in item.Movies)
{
@movie.Name
}
</td>
</tr>
}
</table>