我是否需要控制器中每个不同操作的视图
本文关键字:操作 视图 是否 控制器 | 更新日期: 2023-09-27 18:31:56
很简单,这实际上是我第一天使用 MVC ASP.NET
例如,在这里,我要向大厅添加一个表,然后我想再次显示表列表,我在索引视图中这样做。
是否需要创建与索引视图内容相同的 AddTable 视图?
试过这个,但没有用。
public class PokerController : Controller
{
Lobby L;
// GET: /Poker/
public PokerController()
{
L = Lobby.Instance;
}
public ActionResult Index()
{
return View(L.Tables);
}
public void AddTable()
{
L.Tables.Add(new Table(3));
this.Index();
}
}
仅当操作要返回特定于该操作的视图时,才需要一个视图。 但是,任何给定的操作都可以返回许多ActionResult
返回值。 文件、原始文本内容、JSON、错误响应、重定向等。
在这种特殊情况下,您似乎希望将用户重定向回Index
操作。 这应该可以解决问题:
public ActionResult Index()
{
return View(L.Tables);
}
public ActionResult AddTable()
{
L.Tables.Add(new Table(3));
return RedirectToAction("Index", "Poker");
}
如果您不希望它是重定向,而是想显式返回该视图,这应该有效:
public ActionResult Index()
{
return View(L.Tables);
}
public ActionResult AddTable()
{
L.Tables.Add(new Table(3));
return View("Index", L.Tables);
}
从用户的角度来看,两者之间的主要区别在于,在第一种情况下,他们看到的URL仍将"/Poker/Index"
,而在第二种情况下,他们会看到"/Poker/AddTable"
。 在大多数情况下,前者是首选,因为如果您不知道后者可能会导致奇怪的行为。
从服务器端代码的角度来看,主要区别在于,在第二种情况下,实际的Index()
方法将再次执行,这可能意味着在技术上不需要再次访问数据库。 在大多数情况下,这不是问题,但是如果您必须真正微调性能,那么在某些情况下可能值得使用第二种方法。
您可以强制任何操作呈现相同的视图,例如
public ActionResult AddTable()
{
L.Tables.Add(new Table(3));
return View("Index", L.Tables);
}
这里的潜在问题(可能不适合您)是您的 URL 现在看起来像 /AddTable
.通常,依靠适当的数据存储并使用URL重定向是一个更好的主意,例如
public ActionResult Index()
{
return View(L.Tables);
}
public void AddTables()
{
L.Tables.Add(new Tables(3));
L.SaveToDB(); // just an example
RedirectToAction("Index");
}
因此,表已添加,并且 URL 未更改。
您可以创建两个视图。 一个用于显示数据列表,另一个用于添加数据。如果要在一个页面中设置这两个操作,可以使用 Ajax。