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

时间:2016-02-11 22:17:54

标签: c# asp.net-mvc

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

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>

我认为很明显我有点失落,但我想我有两个问题。

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

更新

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

我现在得到的转换错误无法转换为int for stepid而且无法转换为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; }
}

UserStep

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


}

ApplicationUser

    ....other areas

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

我为要求提供一些细节而道歉,但这一方面似乎非常重要。

1 个答案:

答案 0 :(得分:0)

您可以创建一个返回ActionResult等的函数,而不是返回JsonResult。或者更好的是,您可以创建和使用WebApi控制器(如果您选择,它可以为您构建一些CRUD函数至)。

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