我有一个标准模型/表,只有几个字段有一个控制器和基本的脚手架视图关联(步骤)。这与应用程序用户无关。我在中间也有一个关系表(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