如果项目已经在数据库中,请在视图中执行不同的 ActionResult - ASP.NET MVC4 EF5 HTML5
Posted
技术标签:
【中文标题】如果项目已经在数据库中,请在视图中执行不同的 ActionResult - ASP.NET MVC4 EF5 HTML5【英文标题】:If item already in Database, do different ActionResult in View - ASP.NET MVC4 EF5 HTML5 【发布时间】:2013-04-23 10:11:50 【问题描述】:如果我要转到“项目”的简单 Index() 视图,请说。 我在该索引视图中有一个操作结果,它添加到数据库中(这将是一个在模型中具有项目库的客户)。如果客户已经在数据库中拥有该选择的项目,我希望 ActionLink 显示类似
@html.ActionLink("Remove from Library", "RemoveFromLibrary", new id=item.Id)
客户模型
public List<LoanedItem> Library get; set;
项目索引视图
@Html.ActionLink("Add To Library", "AddToItems", new id=item.Id)
我将如何以最简单的方式解决这个问题? (我是新手)
谢谢
附言。在现实场景中,它就像一个 ebay 监视列表。如果某个项目已在关注列表中,则显示要从该项目的关注列表中删除的文本
编辑:
我不确定是在 Controller 中编写代码还是在视图本身中编写代码,但对于视图,我尝试添加以下内容并卡住了
public ActionResult Index()
Customer c = (Customer)Session["customer"];
var items = ItemRepository.GetItems().OfType<Item>();
var itemsLoanedToCustomer = customerRepository.GetItems(c.Id);
foreach (Item i in items)
if (itemsLoanedToCustomer.Contains(i))
return View();
完整索引()视图
@model IEnumerable<MMC.Model.Item>
@
ViewBag.Title = "Index";
<h2>Tracks</h2>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Artist)
</th>
<th>
@Html.DisplayNameFor(model => model.Genre)
</th>
<th>
@Html.DisplayNameFor(model => model.DailyLoanPrice)
</th>
<th>
@Html.DisplayNameFor(model => model.Publisher)
</th>
<th>
@Html.DisplayNameFor(model => model.ReleaseDate)
</th>
<th>
@Html.DisplayNameFor(model => model.Title)
</th>
<th>
@Html.DisplayNameFor(model => model.YearOfPublication)
</th>
<th></th>
</tr>
@foreach (var item in Model)
<tr>
<td>
@Html.DisplayFor(modelItem => item.Artist)
</td>
<td>
@Html.DisplayFor(modelItem => item.Genre)
</td>
<td>
@Html.DisplayFor(modelItem => item.DailyLoanPrice)
</td>
<td>
@Html.DisplayFor(modelItem => item.Publisher)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReleaseDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.YearOfPublication)
</td>
<td>
@Html.ActionLink("Details", "Details", new id=item.Id ) |
@Html.ActionLink("Add To Library", "AddToTracks", new id=item.Id)
</td>
</tr>
</table>
客户模型
public class Customer
public int Id get; set;
public string ForeName get; set;
public string SurName get; set;
public Address address get; set;
public string Email get; set;
public string Telephone get; set;
public string Mobile get; set;
public List<LoanedItem> MediaLibrary get; set;
public Bill balance get; set;
public Customer()
if (Library == null)
Library = new List<LoanedItem>();
物品模型
public class Item
public int Id get; set;
public double DailyLoanPrice get; set;
[DisplayFormat(DataFormatString = "0:yyyy/MM/dd", ApplyFormatInEditMode = true)]
public DateTime LastTimeBorrowed get; set;
public int NumberOfTimeBorrowed get; set;
public string Publisher get; set;
//rating
[DisplayFormat(DataFormatString = "0:yyyy/MM/dd", ApplyFormatInEditMode = true)]
public DateTime ReleaseDate get; set;
public string Title get; set;
public double TotalSalesIncome get; set;
public int YearOfPublication get; set;
【问题讨论】:
如果他们已经拥有它,请将其删除并重新添加?你的问题不清楚。你试过什么代码? @SamLeach 请见上文 【参考方案1】:您从哪里获得要显示其操作链接的 LibraryItems 列表?如果它们在您的模型中,那么;
在视图中检查用户是否已经拥有该项目并相应地显示操作链接。
@(if(Model.Customers.Items.Select(x => x.Id).Intersect(Model.Items.Select(x => x.Id)).Any())
Html.ActionLink("Remove from Library", "RemoveFromLibrary", new id=item.Id);
else
Html.ActionLink("Add To Library", "AddToItems", new id=item.Id);
)
此外,如果您使用的是 EF,则可以执行类似的操作
public ActionResult Index()
Customer c = (Customer)Session["customer"];
// Items is the navigation property.
var customerItems = customerRepository.GetItems(c.Id).Items;
return View();
使用下面的 ViewModel
public class CustomerItem
public List<Item> Items;
public List<Customer> Customers;
public CustomerItem()
Items = new List<Items>();
Customers = new List<Items>();
【讨论】:
好吧,这个视图是强类型的,并且强类型为“项目”,因此无法在视图中以这种方式获取库项目。每个客户的库项目位于 customerRepository 而不是 trackrepository 中。此视图包含可用项目目录中的所有项目。客户只有少数存储在客户模型中的个人库中。本质上,我需要的是 ebay 监视列表的功能。如果该项目已在关注列表中,则显示从关注列表中删除 如何在视图示例中使用您的添加? 发布您的完整视图和所有使用过的模型,我可以为您提供帮助。 已添加,查看原帖 您需要更改您的视图模型以包括客户和项目。以上是关于如果项目已经在数据库中,请在视图中执行不同的 ActionResult - ASP.NET MVC4 EF5 HTML5的主要内容,如果未能解决你的问题,请参考以下文章
在 Autodesk forge 中选择的项目中获取不同的 3d 视图