2016-11-18 3 views
0

Я пытаюсь получить свойство из модели представления объекта со своими свойствами, показанными в подробном представлении моего действия. Свойством, которое я пытаюсь получить, является sessionId, который указан в моем представлении. Мой код, чтобы вывести его значение, не возвращает правильное значение. Значение sessID имеет значение 0 при отладке. Что я делаю неправильно?Получение свойства модели из «Details» View в ASP.Net MVC

My Model

public class SessionViewModel  
    { 
     public SessionViewModel() 
     { 

     } 

     public SessionViewModel(Session sessionDTO) 
     { 
      Id = sessionDTO.Id; 
      SessionTitle = sessionDTO.SessionTitle; 
      SessionDescription = sessionDTO.SessionDescription; 
      SessionPresenter = sessionDTO.SessionPresenter; 
      SessionLocation = sessionDTO.SessionLocation; 
      SessionRoom = sessionDTO.SessionRoom; 
      SessionDate = sessionDTO.SessionDate; 
      SessionOccupancy = sessionDTO.SessionOccupancy; 
     } 

     public int Id { get; set; } 
     public string SessionTitle { get; set; } 
     public string SessionDescription { get; set; } 
     public string SessionPresenter { get; set; } 
     public string SessionLocation { get; set; } 
     public string SessionRoom { get; set; } 
     public DateTime SessionDate { get; set; } 
     public int SessionOccupancy { get; set; } 
     public bool IsSelected { get; set; } 
    } 

Мой Посмотреть

@model Project.Models.ViewModels.ManageSession.SessionViewModel 
    @{ 
     ViewBag.Title = "SessionDetails"; 
    } 
    <h2>Session Details</h2> 
    @using (Html.BeginForm("RegisterFromDetailsVM", "Session")) 
    { 
     <button type="submit" class="btn btn-success">Register</button> 
     <div> 
      <hr /> 
      <dl class="dl-horizontal"> 
      <dt>Session ID</dt> 
      <dd> 
       @Html.DisplayFor(model => model.Id) 
      </dd> 
      <dt>Title</dt> 
      <dd> 
       @Html.DisplayFor(model => model.SessionTitle) 
      </dd> 
      <dt>Description</dt> 
      <dd> 
       @Html.DisplayFor(model => model.SessionDescription) 
      </dd> 
      <dt>Presenter</dt> 
      <dd> 
       @Html.DisplayFor(model => model.SessionPresenter) 
      </dd> 
      <dt>Location</dt> 
      <dd> 
       @Html.DisplayFor(model => model.SessionLocation) 
      </dd> 
      <dt>Room</dt> 
      <dd> 
       @Html.DisplayFor(model => model.SessionRoom) 
      </dd> 
      <dt>Date</dt> 
      <dd> 
       @Html.DisplayFor(model => model.SessionDate) 
      </dd> 
      <dt>Occupancy</dt> 
      <dd> 
       @Html.DisplayFor(model => model.SessionOccupancy) 
      </dd> 
      </dl> 
     </div> 
    } 

Мои действия

[HttpPost] 
    public ActionResult RegisterFromDetailsVM(SessionViewModel sessionVM) 
    {    
     using (WSADDbContext context = new WSADDbContext()) 
     {     
      //Capture logged in user info 
      int userID = context.Users.Where(x => x.Username == User.Identity.Name).Select(y => y.Id).FirstOrDefault(); 
      string userName = context.Users.Where(x => x.Username == User.Identity.Name).Select(y => y.Username).FirstOrDefault(); 
      string firstName = context.Users.Where(x => x.Username == User.Identity.Name).Select(y => y.FirstName).FirstOrDefault(); 
      string lastName = context.Users.Where(x => x.Username == User.Identity.Name).Select(y => y.LastName).FirstOrDefault(); 

      //Get the sessionId 
      int sessID = sessionVM.Id;     

      //Create the SubscribedSession DTO object 
      context.SubscribedSessions.Add(new SubscribedSession() 
      { 
       UserID = userID, 
       SessionID = sessID, 
       FirstName = firstName, 
       LastName = lastName, 
       Username = userName 
      }); 

      //Save the changes 
      context.SaveChanges(); 
     } 

     //return 
     return RedirectToAction("Index"); 
    } 

ответ

2

Ваша форма не проходит никаких значений обратно. Вам нужно будет использовать @Html.HiddenFor(...), если вы не хотите, чтобы они были непосредственно отредактированы. DisplayFor() только добавляет текст в форму, но они не будут генерировать нужный элемент <input>.

+0

Спасибо Ясен. В итоге я использовал как DisplayFor(), так и HiddenFor(). DisplayFor() показывает значения, а HiddenFor() фактически передает значения обратно в мое действие. – tmt32mj

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