2016-02-11 42 views
0

我有一个标准模型/表,只有几个字段有一个控制器和基本的脚手架视图关联(步骤)。这与应用程序用户无关。我在中间也有一个关系表(userstep)。我试图在步骤控制器中添加一个方法,该方法基于视图内的点击调用,并且此方法应根据当前信息(当前用户,当前步骤)创建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(); 
} 

现在我意识到这可能是完全错误的,因为我基本上采取了手动从已经为用户和步下拉列表中选择userstep意见创建功能。

然后我会从这个步骤细节屏幕调用它。

<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的stepid,不能转换为字符串用户ID,但是我不知道如何转换这些。

这是我的模特。

步骤

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

我索要一些的细节道歉,但这一地区似乎如此重要明白了。

回答

0

而不是返回ActionResult,您可以创建一个函数,返回JsonResult等等。或者甚至更好,您可以创建和使用WebApi控制器(如果您愿意,可以为您架设一些CRUD功能)。然后,在客户端,您使用一些Ajax调用(使用jQuery或任何js框架)来访问您的服务器端方法,并在您的html(DOM)中反映返回的(json)结果。有几个客户端(JS)框架,如角度等,这将帮助你实现这种行为。

+0

感谢您的帮助,但我对mvc的世界还比较陌生,不知道如何使用jsonresult或webapi的想法。有没有办法通过控制器方法来做到这一点?我已经调整了我的控制器,相信我的方法仍然可行。 –

+0

是的,如果相同的方法返回json('JsonResult')而不是ActionResult并且不返回View,那么可以实现这一点。返回视图正在向客户端浏览器再次更新整个页面。 – mentat