1

简单,这实际上是我使用 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();
    }
}
4

3 回答 3

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);
}

从用户的角度来看,两者之间的主要区别在于,在第一种情况下,他们看到的 URL 仍然是"/Poker/Index",而在第二种情况下,他们将看到"/Poker/AddTable". 在大多数情况下,前者是首选,因为如果您不知道后者可能会导致奇怪的行为。

从服务器端代码的角度来看,主要区别在于,在第二种情况下,实际Index()方法将再次执行,这可能意味着再次访问数据库,而从技术上讲,这是不必要的。在大多数情况下,这不是问题,但如果您必须真正微调您的性能,那么在某些情况下可能值得使用第二种方法。

于 2013-09-19T16:18:43.740 回答
2

您可以强制任何操作来呈现相同的视图,例如

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 没有改变。

于 2013-09-19T16:17:00.877 回答
0

你可以做两个视图。一个用于显示数据列表,另一个用于添加数据。如果你想在一页中设置两个动作,你可以使用ajax。

于 2013-09-19T16:20:33.650 回答