У меня есть стандартная модель/таблица с несколькими полями, в которой есть контроллер и основные связанные с ним виды (шаг). Это не зависит от пользователя приложения. У меня также есть реляционная таблица в середине (userstep). Я пытаюсь добавить метод в шаговом контроллере, который вызывается на основе щелчка в представлении, и этот метод должен создать запись userstep на основе текущей информации (текущий пользователь, текущий шаг). Надеюсь, это имеет смысл, потому что это сводит меня с ума. Это мой метод в шаговом контролере.Как добавить запись (вызов метода) без представления
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>
Я предполагаю, что очевидно, что я немного потерян, но, наверное, у меня есть два вопроса.
- Что не так с моим методом, если мне не нужен вид, а вместо этого просто запись, которую нужно создать?
- Как захватить текущий шаг и текущего пользователя, если метод относится к пользовательскому типу?
Update
[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();
}
}
}
теперь я получаю ошибки преобразования с не может преобразовать в целое для stepid и не может преобразовать строку для идентификатора пользователя, однако я не уверен, как конвертировать эти.
Вот мои модели.
Шаг
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