我有一個標準模型/表,只有幾個字段有一個控制器和基本的腳手架視圖關聯(步驟)。這與應用程序用戶無關。我在中間也有一個關係表(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; }
我索要一些的細節道歉,但這一地區似乎如此重要明白了。
感謝您的幫助,但我對mvc的世界還比較陌生,不知道如何使用jsonresult或webapi的想法。有沒有辦法通過控制器方法來做到這一點?我已經調整了我的控制器,相信我的方法仍然可行。 –
是的,如果相同的方法返回json('JsonResult')而不是ActionResult並且不返回View,那麼可以實現這一點。返回視圖正在向客戶端瀏覽器再次更新整個頁面。 – mentat