2016-02-11 51 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