Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否需要控制器中每个不同操作的视图?_C#_Asp.net_Asp.net Mvc 4 - Fatal编程技术网

C# 我是否需要控制器中每个不同操作的视图?

C# 我是否需要控制器中每个不同操作的视图?,c#,asp.net,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc 4,简单一点,这是我使用ASP.NET MVC的第一天 例如,在这里,我将向大厅添加一个表,然后我想再次显示表列表,这是我在索引视图中所做的 我是否需要创建一个与索引视图内容相同的AddTable视图 我试过了,但没用 public class PokerController : Controller { Lobby L; // GET: /Poker/ public PokerController() { L = Lobby.Instance;

简单一点,这是我使用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();
    }
}

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

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

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

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

如果操作将返回特定于该操作的视图,则只需要一个视图。但是,任何给定操作都可以返回许多
ActionResult
返回值。文件、原始文本内容、JSON、错误响应、重定向等

在这种特殊情况下,您似乎希望将用户重定向回
索引
操作。这应该可以做到:

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()
方法将再次执行,这可能意味着再次访问数据库,而从技术上讲,这是不必要的。在大多数情况下,这不是问题,但是如果您必须对性能进行真正的微调,那么在某些情况下,使用第二种方法可能是值得的。

只有当操作返回特定于该操作的视图时,您才需要一个视图。但是,任何给定操作都可以返回许多
ActionResult
返回值。文件、原始文本内容、JSON、错误响应、重定向等

在这种特殊情况下,您似乎希望将用户重定向回
索引
操作。这应该可以做到:

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()
方法将再次执行,这可能意味着再次访问数据库,而从技术上讲,这是不必要的。在大多数情况下,这不是问题,但是如果您必须对性能进行微调,那么在某些情况下,使用第二种方法可能是值得的。

您可以创建两个视图。一个用于显示数据列表,另一个用于添加数据。
如果要在一个页面中设置两个操作,可以使用ajax。

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

您能为“奇数”给出一个假设情况吗?以及如何正确使用可以避免“导致”奇数。@AndyzSmith:例如,返回视图中的任何相对URL(包括默认的
BeginForm()
调用,这些调用没有明确指定操作)都会中断。如果有任何东西依赖于一个推荐人的URL,那就会改变。主要对我来说,这只是一个直观的URL问题。如果查看的是当前的表索引,则不应位于名为“
”AddTable“
”的URL上。您能为“奇数”给出一个假设情况吗?以及如何正确使用可以避免“导致”奇数。@AndyzSmith:例如,返回视图中的任何相对URL(包括默认的
BeginForm()
调用,这些调用没有明确指定操作)都会中断。如果有任何东西依赖于一个推荐人的URL,那就会改变。主要对我来说,这只是一个直观的URL问题。如果你正在查看当前的表索引,你不应该在一个名为
“AddTable”
的URL上。谢谢大家,三个很好的答案。接受了那个似乎更完整的。其他两个投了赞成票。谢谢你们,三个很好的答案。接受了那个似乎更完整的。但还是投票支持了另外两个。