好的我有两个问题:
1 - 我有一个返回成员图像列表的视图。如果单击图像,则需要在同一视图中显示成员信息,但现在出现以下错误:
控制器类型'HomeController'上的当前操作请求'ViewMembers'在以下操作方法之间不明确: System.Web.Mvc.ActionResult类型为ServingTeam.Controllers.HomeController的ViewMembers(Int32) System.Web.Mvc.ActionResult类型为ServingTeam.Controllers.HomeController的ViewMembers()
控制器:
public ActionResult ViewMembers()
{
TempData["returnMember"] = false;
List<Members> members = memberRepo.GetAllMembers();
return View(members);
}
[ActionName("ViewMembers")]
public ActionResult ViewMembers(int slug)
{
Members member = new Members();
member = memberRepo.GetMember(slug);
if (member != null)
return View(member);
return View("ViewMembers");
}
2 - 如何在显示成员列表的视图中显示单个对象?我创建了一个部分视图来显示成员的信息,但它不允许我这样做。
任何帮助将不胜感激
答案 0 :(得分:1)
您有两个具有相同路线的控制器操作(方法)。您需要重命名其中一个。您仍然可以从两者返回相同的视图。我建议将第二个重命名为ViewMember
。
问题的第二部分:
如果您坚持同时使用相同的视图:显示成员列表并显示&#34;选择&#34;成员信息,然后将SelectedMember
属性添加到模型中或将其添加到ViewBag
并将其传递到部分视图中。所以,你的行动可能是这样的:
public ActionResult ViewMember(int slug)
{
List<Members> members = memberRepo.GetAllMembers();
Member member = memberRepo.GetMember(slug);
ViewBag["SelectedMember"] = member;
return View("ViewMembers", members);
}
在渲染局部视图之前,请务必检查ViewBag["SelectedMember"]
是否不是null
,或在局部视图中处理null
案例。
答案 1 :(得分:0)
你为什么要做两个不同的动作。一个动作可以帮到你:
[ActionName("ViewMembers")]
public ActionResult ViewMembers(int slug=0)
{
if(slug > 0)
{
Members member = null;
member = memberRepo.GetMember(slug);
if (member != null)
return View(member);
return View("ViewMembers");
}
else
{
TempData["returnMember"] = false;
List<Members> members = memberRepo.GetAllMembers();
return View(members);
}
}
答案 2 :(得分:0)
我建议不要使用TempData
或ViewBag
,因为两者都不是强类型,直观(对于您或其他任何查看您的代码的人),难以维护等首先创建ViewModel:
public class ViewMemberViewModel
{
public ViewMemberViewModel()
{
// I like having my classes in valid states
// before the constructor finishes
this.Members = new List<Member>();
}
public List<Member> Members { get; set; }
}
接下来,使用Nullable<int>
创建一个操作。为什么可以为空?因为使用magic numbers (type #3)通常不是描述没有值的最佳方式。没有值,已经在框架中创建(null)。这与Ehsan Sajjad's anwswer非常相似。
public ActionResult ViewMembers(int? slug)
{
var model = new ViewMemberViewModel();
if (slug.HasValue)
{
var member = memberRepo.GetMember(slug);
model.Members.Add(member);
}
else
{
var members = memberRepo.GetAllMembers();
model.Members.AddRange(members);
}
return View(members);
}
看得很清楚:
@model ViewMemberViewModel
@foreach(var member in Model.Members)
{
// The Controller already uses logic
// to return 1 or more members.
}
@* don't forget if there aren't any *@
@if (Model.Members.Count == 0)
{
// No members to display
}