【问题标题】:MVC4 - ActionLink to either Create() or, if already existing, Edit(Id)MVC4 - ActionLink 到 Create() 或者,如果已经存在,Edit(Id)
【发布时间】:2015-01-27 10:41:39
【问题描述】:

我想要一个显示“设置用户默认值”的操作链接。数据库可能尚未为单击链接的用户存储 UserDetails。如果是这种情况,我想在用户可以保存新对象时将其引导至创建视图。

如果用户的 UserDetails 已经存在,我想将用户引导到他们的 Edit(id) 页面并从数据库中加载他们现有的 UserDetails。

基本上我需要一个 ActionLink,它可以根据某些信息指向不同的视图。

MVC 中实现此目的的首选/标准方式是什么?

现有记录

@Html.ActionLink("set user default", "Edit", "User")

不存在的记录

@Html.ActionLink("set user default", "Create", "User")

这是我进行的尝试,但它不起作用,因为 EditOrCreate 需要是一个视图 - 理想情况下,这种情况不需要创建另一个视图。

    public ActionResult EditOrCreate()
    {
        User user = Get(User.Identity.Name);

        if (user != null)
            Edit(user);
        else
            Create();
    }

【问题讨论】:

  • Edit()Create() 是什么,显示他们的定义
  • 一个选项可能是将操作链接设置为Edit,然后在Edit() 方法中进行检查,如果usernullRedirectToAction("Create");
  • @EhsanSajjad Edit(user) 和 Create() 是标准的 MVC 公共 ActionResult 方法。
  • 所以他们不适合你?
  • 我认为这不会被认为是“糟糕”的做法(例如,通常当您发布到编辑方法时,您会重定向到其他地方或根据检查 ModelState.IsValid 返回视图)。虽然我个人会在您生成视图时进行检查,然后使用更具描述性的显示文本呈现一个或另一个链接

标签: asp.net-mvc asp.net-mvc-4 actionlink html.actionlink


【解决方案1】:

您可以通过将操作链接到 SetUserDefault 操作方法来实现,例如

@Html.ActionLink("set user default", "SetUserDefault", "User")

在action方法内部检测用户类型,然后将用户重定向到正确的action

public ActionResult SetUserDefault()
{
    User currentUser = Get(User.Identity.Name);

    if (currentUser != null)
        return RedirectToAction("Edit", new { id = currentUser.Id });
    else
        return RedirectToAction("Create");
}

【讨论】:

  • 这行得通,但是我需要为 Id 添加返回值和参数。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多