【问题标题】:View and controller in asp.net mvc3 - controller should match a view one to one?asp.net mvc3中的视图和控制器 - 控制器应该一对一匹配视图?
【发布时间】:2017-04-13 20:24:14
【问题描述】:

我在任何应用程序中都有一个非常典型的情况,我有以下功能:

  • 创建新记录
  • 编辑现有记录
  • 其他不相关的操作

IMO,创建和编辑应该由相同的视图提供服务,但操作不同。但看来我必须让动作名称与视图名称相匹配......你会为此使用部分视图吗?我不想让这个场景复杂化——它非常简单,几乎出现在每个网络应用程序中。

【问题讨论】:

    标签: asp.net-mvc-3 views action


    【解决方案1】:

    Action 可以通过这种方式返回具有不同名称的视图:

    public ActionResult OneName()
    {
        return View("OtherName");
    }
    

    如果您不指定视图名称 (View("") 那么视图将是具有操作名称的视图

    【讨论】:

    • 这正是我想要的!
    【解决方案2】:

    部分视图是一个很好的答案。我建议你看看 MvcScaffold NuGet 包是如何做到的。 See here 或在 Visual Studio 中获取包。

    【讨论】:

      【解决方案3】:

      我只需完全使用相同的操作并使用 ID 来确定这是新记录还是更新现有记录:

      /Forum/Post/Edit/0创建新记录

      /Forum/Post/Edit/10457 更新 ID 为 10457 的记录

      但是,既然您坚持使用不同的动作,为什么不简单地创建 2 个动作,都返回相同的视图?

      public class PostController : Controller
      {
          public ActionResult Create(Post post)
          {
              // work your magic...
      
              return View("Edit", post);
          }
      
          public ActionResult Update(Post post)
          {
              // work your magic...
      
              return View("Edit", post);
          }    
      }
      

      如果这在您的场景中不起作用,那么您几乎只剩下部分视图。

      【讨论】:

      • "I would simply use the same action altogether and use the ID to determine if this is a new record or an existing one" - 糟糕,糟糕的设计。
      • @Dismissile 我会接受该评论作为已接受的答案... +1
      • @Dismissile 它如何算作糟糕的设计? id=0 一般认为是新记录。几乎所有软件都使用 ID 来跟踪记录。如果那是糟糕的设计,我们只是将世界上 99% 的应用程序渲染为重构。所以,请证明你的观点。
      • @Dismissile 一个动作\方法 - 仅一个操作。证明了吗?
      • @gdoron 有意见并不能证明事实。拥有一个有根据的人实际上可能会引导您找到一个。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多