Himanshu.A.Joshi Ответов: 1

Как связать пользователя indenity с другой таблицей в MVC?


I've used default MVC template with individual authorization. After running the application it automatically creates the required Identity tables. I've successfully registered a few users and all of them are stored in the AspNetUser table.

Now what I want is the logged in user can add details for register their paas information like first name, from ,to , address etc. For this I've created another table "Paas" with columns to store this information.


я пытался связать это с созданием модели, а затем миграцией, но это не сохранение данных.

вот моя модель paas:

public class Paas
  {
      [Key, ForeignKey("User")]
      public string UserId { get; set; }

      public string FirstName { get; set; }

      // other fields...

      public virtual ApplicationUser User { get; set; }
  }


и в модели indentity я добавил :-

public DbSet<Paas> pas { get; set; }


вот мой контроллер:-

public ActionResult AddPass()
       {
           return View();

       }
       private ApplicationDbContext db = new ApplicationDbContext();
       [HttpPost]
       [ValidateAntiForgeryToken]
       public ActionResult AddPass(Paas p)
       {
           var currentUserId = User.Identity.GetUserId();
           var pasinfo = db.pas.FirstOrDefault(d => d.UserId == currentUserId);
           if(pasinfo==null)
           {
               pasinfo = db.pas.Create();
               pasinfo.FirstName = p.FirstName;
               db.SaveChanges();

           }
           return View();

       }


и мой взгляд:-

<div class="form-group">
     @Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-2" })
     <div class="col-md-10">
         @Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control" } })
         @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" })
     </div>
 </div>

 <div class="form-group">
     <div class="col-md-offset-2 col-md-10">
         <input type="submit" value="Create" class="btn btn-default" />
     </div>
 </div>


Что я уже пробовал:

я хочу добавить детали paas для пользователя, вошедшего в систему perticular, я попробовал этот способ, но проблема в том ,что он ничего не сохраняет, это правильный способ сделать это? или есть какой-то другой способ?

1 Ответов

Рейтинг:
4

Richard Deeming

Цитата:
if(pasinfo==null)
{
    pasinfo = db.pas.Create();
    pasinfo.FirstName = p.FirstName;
    db.SaveChanges();
}

  • Вы еще не установили UserId свойство на новом объекте.
  • Вы никогда не добавляете новую сущность в набор.
  • И если это существующая сущность,вы никогда не обновляете ее.

public ActionResult AddPass(Paas p)
{
    var currentUserId = User.Identity.GetUserId();
    var pasinfo = db.pas.FirstOrDefault(d => d.UserId == currentUserId);
    
    if (pasinfo == null)
    {
        pasinfo = db.pas.Create();
        pasinfo.UserId = currentUserId;
        db.pas.Add(pasinfo);
    }
    
    pasinfo.FirstName = p.FirstName;
    db.SaveChanges();
    
    return View();
}


Himanshu.A.Joshi

Итак, как это сделать, у меня есть поиск google целый день, но я не знаю, как это сделать

Richard Deeming

Прочтите мой ответ - я уже показал вам, как это сделать!

Himanshu.A.Joshi

пожалуйста скажи мне что мне нужно изменить я не могу понять

Richard Deeming

Серьезно?!

Посмотрите на кодовый блок в конце моего ответа. Теперь посмотрите на свой кодовый блок. Ты можешь серьезно не видите разницы?!

Himanshu.A.Joshi

ладно, понял ... позвольте мне попробовать спасибо, что я пытаюсь весь этот день.. и это будет храниться в том же userid, который у меня есть в таблице aspnetuser?

Richard Deeming

Да, он будет хранить значение, возвращенное из User.Identity.GetUserId() в UserId колонка.

Himanshu.A.Joshi

и предположим, что я хочу отобразить данные пользователей, хранящиеся в этой таблице пропусков после того, как он войдет в систему, так что же мне нужно сделать в моем контроллере?

Richard Deeming

var currentUserId = User.Identity.GetUserId();
var pasinfo = db.pas.FirstOrDefault(d => d.UserId == currentUserId);
if (pasinfo != null)
{
    // Display the data...
}

Himanshu.A.Joshi

он не работает до сих пор моя база данных пуста plzz помогите мне

Richard Deeming

Так что отладьте свой код.

Himanshu.A.Joshi

Брат, как ты сказал, У меня есть только изменения здесь и набор : - if (pasinfo = = null)
{
pasinfo = db. pas. Create();
пасинфо.UserId = currentUserId;
db.pas. Add(pasinfo);
}

но все равно он не хранит данные

Richard Deeming

Вы добавили pasinfo.FirstName = p.FirstName; и db.SaveChanges(); строки после if блок?

Himanshu.A.Joshi

Спасибо, брат, большое спасибо, он работает 8 апреля, это подача, и все еще мой проект не завершен.

вы можете мне помочь
я просто хочу сделать одну вещь после того, как я добавлю все вещи в эту таблицу paas, которые я хочу сделать в одобрении от администратора (например, isconfirm true или false )
и только после утверждения пользователь может распечатать эти данные

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

Richard Deeming

Вам нужно будет опубликовать это как новый вопрос , но убедитесь, что вы включили четкое и полное описание того, что вы пытаетесь сделать.

Himanshu.A.Joshi

ладно.......

Himanshu.A.Joshi

var currentUserId = User.Identity.GetUserId();
var pasinfo = db.pas.FirstOrDefault(d => d.UserId == currentUserId);
if (pasinfo != null)
{
    // what to add here for display the specific pass data.
}

Richard Deeming

return View(pasinfo);

Himanshu.A.Joshi

да я пробовал прежде чем спросить вас но проблема в том что он говорит нет кода путь возвращает значение

Richard Deeming

Ты имеешь в виду "не все пути кода возвращают значение"?

Вам нужно что-то вернуть, если информация не найдена:

if (pasinfo != null) return View(pasinfo);
return View("NotFound");

Himanshu.A.Joshi

я хочу отобразить данные из двух моделей paas и таблицы applicationuser в одном представлении для вошедшего в систему пользователя поэтому я сделал такую комбинированную модель

public class apmodel  
 {        
        public ApplicationUser rg { get; set; }
        public Paas p { get; set; }   
 }

и в контроллере:-

public ActionResult passdetails( Apmodel ap)
  {
           /what to write here for display data from this both 
          return View();       
 }

Richard Deeming

Предполагая, apmodel и Apmodel являются одним и тем же классом:

return View(ap);

Himanshu.A.Joshi

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

Richard Deeming

И что же?

В коде, который вы показали, у вас уже есть заполненный Apmodel пример. Все, что вам нужно сделать, это показать его.

Если это не проблема, то вам нужно опубликовать новый вопрос с полной информацией о том, что вы пытаетесь сделать, что вы пробовали и где вы застряли.

Himanshu.A.Joshi

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

Richard Deeming

Поскольку я не вижу, как вы создаете Apmodel например, я никак не могу ответить на этот вопрос.

Как я уже сказал, опубликуйте новый вопрос с полной информацией о том, что вы пытаетесь сделать, что вы пробовали и где вы застряли.

Himanshu.A.Joshi

хорошо я отправил вопрос

Himanshu.A.Joshi

я опубликовал и обновил свой новый вопрос