如何在没有视图的情况下添加记录(调用方法)

本文关键字:加记录 添加 调用 方法 情况下 视图 | 更新日期: 2023-09-27 18:34:25

我有一个标准模型/表,只有几个字段,它有一个控制器和相关的基本脚手架视图(步骤(。 这与应用程序用户无关。 我在中间还有一个关系表(用户步骤(。 我正在尝试在步骤控制器中添加一个基于视图中单击调用的方法,此方法应根据当前信息(当前用户,当前步骤(创建用户步骤记录。 我希望这是有道理的,因为它让我发疯。 这是我在步进控制器中的方法。

public ActionResult Create(UserStep userStep)
{
    if (ModelState.IsValid)
    {
        using (ApplicationDbContext db = new ApplicationDbContext())
        {
            UserStep userstep = new UserStep();
            userstep.StepID = db.Steps.Find(id);
            userstep.UserId = UserManager.FindById(User.Identity.GetUserId());

            db.UserSteps.Add(userStep);
            db.SaveChanges();
        }
    }
    return View();
}  

现在我意识到这可能是完全错误的,因为我基本上从用户步骤视图中获取了手动创建功能,该视图具有用户和步骤的下拉列表。

然后,我将像这样从步骤详细信息屏幕调用它。

<a href="@Url.Action("Create", "Step")" data-toggle="modal" data-target="#videoModal" data-thevideo="@Html.DisplayFor(model => model.URL)">
      <div class="text-center">Play Now</div>
</a>

我想很明显我有点迷茫,但我想我有两个问题。

  • 如果我不需要视图,而只需要要创建的记录,我的方法有什么问题?
  • 如果方法是关于用户步骤的,如何获取当前步骤和当前用户?

更新

[HttpPost]
public JsonResult Create(UserStep userStep)
{
    if (ModelState.IsValid)
    {
        using (ApplicationDbContext db = new ApplicationDbContext())
        {
            UserStep userstep = new UserStep();
            userstep.StepID = db.Steps.Find(id);
            userstep.UserId = UserManager.FindById(User.Identity.GetUserId());

            db.UserSteps.Add(userStep);
            db.SaveChanges();
        }
    }
}

我现在遇到转换错误,无法转换为 stepid 的 int 并且无法转换为 userid 的字符串,但是我不确定如何转换这些。

这是我的模型。

public class Step
{
    [Display(Name = "Step #")]
    public int StepID { get; set; }
    [StringLength(50, MinimumLength = 3)]
    public string Title { get; set; }
    [StringLength(200, MinimumLength = 3)]
    public string Description { get; set; }
    public string URL { get; set; }
    public virtual ICollection<UserStep> UserSteps { get; set; }
}

用户步骤

public class UserStep
{
    [ForeignKey("User")]
    public string UserId { get; set; }
    public int UserStepID { get; set; }
    public int StepID { get; set; }
    public virtual ApplicationUser User { get; set; }
    public virtual Step Step { get; set; }

}

应用程序用户

    ....other areas
    public virtual ICollection<UserStep> UserSteps { get; set; }

我很抱歉要求很多细节,但这个领域似乎很重要。

如何在没有视图的情况下添加记录(调用方法)

不是返回 ActionResult ,而是可以创建一个返回 JsonResult 等的函数。甚至更好的是,您可以创建和使用 WebApi 控制器(如果您愿意,它会为您搭建一些 CRUD 函数(。

然后,在客户端,你使用一些Ajax调用(使用jQuery或任何js框架(来访问你的服务器端方法,并在你的html(DOM(中反映返回的(json(结果。有几个客户端(js(框架(如angular等(可以帮助您实现此行为。