2016-02-11 3 views
0

У меня есть стандартная модель/таблица с несколькими полями, в которой есть контроллер и основные связанные с ним виды (шаг). Это не зависит от пользователя приложения. У меня также есть реляционная таблица в середине (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; } 

Я извиняюсь за вопрос по какой-то подробности, но это одна область, кажется, так важно Понимаю.

ответ

0

Вместо того, чтобы возвращать ActionResult, вы можете создать функцию, которая возвращает JsonResult, и т. Д. Или даже лучше, вы можете создать и использовать контроллер WebApi (для вас выберете некоторые функции CRUD, если вы решите).

Затем на стороне клиента вы используете какой-либо вызов Ajax (используя jQuery или любую инфраструктуру js) для доступа к вашему методу на стороне сервера и отражения возвращенного (json) результата в вашем html (DOM). Существует несколько клиентских (js) фреймворков, таких как угловые и т. Д., Которые помогут вам достичь такого поведения.

+0

Благодарим вас за помощь, но я довольно новичок в мире mvc и еще не знаю, как использовать ваши идеи jsonresult или webapi. Нет ли способа сделать это с помощью метода контроллера? Я скорректировал свой контроллер выше, полагая, что мой подход все еще возможен. –

+0

Да, если тот же метод возвращает json ('JsonResult') вместо ActionResult и не возвращает View, вы можете это сделать. Возврат представления говорит браузеру клиента обновить всю страницу снова. – mentat

Смежные вопросы