简单一点,它实际上是我使用ASP.NET MVC的第一天
例如,在这里,我正在向大厅添加一个表格,然后我想再次显示表格列表,我在索引视图中这样做。
我是否需要创建一个与索引视图具有相同内容的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();
}
}
答案 0 :(得分:2)
您可以强制执行任何操作以呈现相同的视图,例如
public ActionResult AddTable()
{
L.Tables.Add(new Table(3));
return View("Index", L.Tables);
}
潜在问题(可能不适合您)这里的网址现在看起来像/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没有更改。
答案 1 :(得分:2)
如果操作将返回特定于该操作的视图,则只需要一个视图。但是,有许多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);
}
从用户的角度来看,两者之间的主要区别在于,在第一种情况下,他们看到的网址仍为"/Poker/Index"
,而在第二种情况下,他们会看到"/Poker/AddTable"
。在大多数情况下,前者是首选,因为后者可能导致奇怪的行为,如果你不知道它。
与服务器端代码的主要区别在于,在第二种情况下,实际的Index()
方法将再次执行,这可能意味着另一次访问数据库,其中一个技术上不是没必要。在大多数情况下,这不是一个问题,但如果你必须真正微调你的表现,那么在某些情况下使用第二种方法可能值得。
答案 2 :(得分:0)
你可以提出两个观点。一个用于显示数据列表,另一个用于添加数据。 如果要在一个页面中设置两个动作,可以使用ajax。