2013-08-17 6 views
0

Я пишу проект asp.net mvc3 с пакетом SQL Server 2012 и EF. Я добавил разрешение на этот проект. Он создает пользователя успешно, но после создания я хочу, чтобы он перенаправлялся на страницу, где отображалась вся информация об ученике, но я не понимаю, как я это делаю. Все, что я нашел в моем представлении, выглядит примерно так:Показать информацию о пользователе после успешного входа в систему

@User.Identity.Name 

Но этого недостаточно для меня. Я пытался отправить идентификатор, но он возвращает мне ошибку. Вот мой код:

public ActionResult Register() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Register(Student student) 
    { 
     Register(student.Username, student.Password, student.Email, true, student.FirstName, student.LastName); 
     return RedirectToAction("Index", "Membership", new {id == student.StudentId}); 
    } 

    public static MembershipCreateStatus Register(string Username, string Password, string Email, bool IsApproved, string FirstName, string LastName) { 
     MembershipCreateStatus CreateStatus; 
     System.Web.Security.Membership.CreateUser(Username, Password, Email, null, null, IsApproved, null, out CreateStatus); 

     if (CreateStatus == MembershipCreateStatus.Success) { 
      using (UniversityContext Context = new UniversityContext(ConfigurationManager.ConnectionStrings[0].ConnectionString)) { 
       Student User = Context.Students.FirstOrDefault(Usr => Usr.Username == Username); 
       User.FirstName = FirstName; 
       User.LastName = LastName; 
       Context.SaveChanges(); 
      } 

      if (IsApproved) { 
       FormsAuthentication.SetAuthCookie(Username, false); 
      } 
     } 

     return CreateStatus; 
    } 

public ActionResult Index(int id) 
    { 
     var model = context.Students 
      .Include(x => x.Universities) 
      .Include(x => x.FieldStudies) 
      .Include(x => x.StudyModes) 
      .Include(x => x.StudentDegrees) 
      .Include(x => x.EntryMonths) 
      .Include(x => x.Genders) 
      .Include(x => x.EnglishLanguages) 
      .Include(x => x.RussianLanguages) 
      .Include(x => x.LatvianLanguages) 
      .Include(x => x.OtherLans) 
      .Include(x => x.OtherLanNexts) 
      .FirstOrDefault(x => x.StudentId == id); 

     return View(model); 
    } 

Фототуры из коробки Создать/Detail с сильно типизированных моей студенческой модели, Любые идеи?

EDIT

Я добавить в мой взгляд, следующие строки кода, но я думаю, что это не является правильным решением

@model IEnumerable<Models.Entities.Student> 

@{ 
    ViewBag.Title = "Index"; 
    Layout = "~/Views/Shared/_SecondLayout.cshtml"; 
    var name = @User.Identity.Name; 
} 

<h2>Index</h2> 


Hello there @name 

<fieldset> 
    <legend>Student</legend> 
    @foreach(var item in Model) 
    { 
     if (item.Username == name) 
     { 
      <div class="display-label"> 
       @Html.DisplayNameFor(model => model.Username) 
      </div> 
      <div class="display-field"> 
       @Html.DisplayFor(model => item.Username) 
      </div> 

     } 
    } 

ответ

0

Ваши ActionResult Index(int id) возвращает только один объект или нуль (.FirstOrDefault(x => x.StudentId == id);) Но вы ввели свой вид в виде списка объектов IEnumerable<Models.Entities.Student>.

так,

1) Изменить верхнее определение к @model Models.Entities.Student

2) Теперь вы можете получить доступ ко всем свойствам, которые нужны с помощью @Model Постулатов:

@Model.username 
@Model.email 
@Model.FirstName 
@Model.SeconName 
.... 
Смежные вопросы