ورود

View Full Version : درج همزمان در دو جدول



kahkeshane2012
چهارشنبه 10 دی 1393, 00:05 صبح
با عرض سلام و احترام. سه جدول با نام Role & User & RoleInUser که جدول RoleInUser به عنوان جدول میانی است ؛میخوام که به صورت همزمان با یک اکشن در جدول User و جدول میانی درج انجام بدم؛ اما متاسفانه هر لحظه یک خطای رخ میده ؛در حال حاضر خطای : مشکل کدم کجاست :(


Additional information: The best overloaded method match for 'int.Parse(string)' has some invalid arguments



[HttpGet]
public ActionResult CreateUser()
{
ViewBag.RoleId = new SelectList(db.Roles, "RoleId", "RoleName");
return View();
}


[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateUser(UserModel user)
{
if (ModelState.IsValid)
{
var varRoleId = ViewBag.RoleId;
Models.User _user = new User
{
UserName = user.UserName,
Password = user.Password,
Email = user.Email
};
var qoury = (from q in db.Users
select (q.UserId)).ToList().LastOrDefault();
qoury++;
ViewBag.RoleId = (new SelectList(db.Roles, "RoleId", "RoleName",true));
Models.UserInRole userinrole = new UserInRole
{
RoleId =int.Parse (ViewBag.RoleId) ,
UserId=qoury
};
db.Users.Add(_user);
db.UserInRoles.Add(userinrole);
db.SaveChanges();
ViewBag.info = "کاربر با موفقیت تعریف شد";
ViewBag.color = "alert-success";
ModelState.Clear();
}
return View();
}



@Html.DropDownList("RoleId", (SelectList)ViewBag.RoleId)

در واقع مشکل اصلی اینجاست که من میخوام وقتی مدیر روی DropDownList کلیک میکند و نقش کاربر را انتخاب میکند RoleId انتخاب بشود؛ و در جدول میانی درج بشه :(
با تشکر.

helpsos
چهارشنبه 10 دی 1393, 01:30 صبح
انقدر کد نوشتی که همه ی اصول را زیر پا گذاشتی
وقتی از viewbag استفاده می کنی که دیگه توی اکشن بعدی var varRoleId = ViewBag.RoleId;
بهش دسترسی نداری مگه اینکه توی ویو پرش کنی.. حالا کاری نداریم کسیم خونمون نبود
راه حل

شما باید از viewmodel ها استفاده کنید (یکمی تحقیق)

kahkeshane2012
چهارشنبه 10 دی 1393, 08:57 صبح
اول پاسخ شما رو بدم اتفاقا وقتی از نوع ViewModel میگیرم با خطای زیر مواجه میشم :


Error 2 'MvcISCA.Models.FacultyDBEntities1' does not contain a definition for 'UserInRoleViewModel' and no extension method 'UserInRoleViewModel' accepting a first argument of type 'MvcISCA.Models.FacultyDBEntities1' could be found (are you missing a using directive or an assembly reference?) C:\Users\LeilaShoja\Documents\Visual Studio 2013\Projects\MvcISCA\MvcISCA\Controllers\Dashbord Controller.cs 53 19 MvcISCA



ضمن اینکه وقتی ارتباط بین جداول یک به چند هست مشکلی نیست اما وقتی چند به چند (پای جدول میانی وسط میاد) که مشکل پیش میاد. من میخوام فقط بدونم چطوری میتونم به Value DropDown دسترسی داشته باشم:(

وقتیQuickwatch میگیرم به RoleId رو دارم چرا نتونم بهش دسترسی داشته باشه ؛ خودتون ببینید در تصویر ضمیمه شده :(

127062

TeacherMath
چهارشنبه 10 دی 1393, 10:05 صبح
باید مقدار varRoleId را چک کنید ببینید نال نیست. طبق تصویری که نشان دادید .ViewBag.RoleId یک IEnum است و نمی توان آن را به int تبدیل کرد.

kahkeshane2012
چهارشنبه 10 دی 1393, 10:15 صبح
طبق تصویر نه نال نیست به نظرم Selected DropDown باید True بشه ینی مشکل اصلی در View م است :(

helpsos
چهارشنبه 10 دی 1393, 10:43 صبح
شما از این خط استفاده کردین:
public ActionResult CreateUser(UserModel user)
حالا شما توی این usermodel ایا فیلدی به اسم roleid داری؟

اگه نه پس به roleid دسترسی نداری

kahkeshane2012
چهارشنبه 10 دی 1393, 15:16 عصر
درسته حق با شماست دسترسی ندارم؛ اما من با ViewBag میخام که دسترسی داشته باشم از جدول Role ؛ این کدی (
var varRoleId = ViewBag.RoleId;) هم که شما اشاره کردید درسته خالی اما اون یه خط اضافی بود که یادم رفته بود پاکش کنم ؛ درواقع با این خط من ViewBag پر میکنم
ViewBag.RoleId = (new SelectList(db.Roles, "RoleId", "RoleName"));

یه سوال جدا از همه این بحث ها اگر که من فیلد RoleId را داخل جدول User بیارم کلا بحث جدول میانی زیره سوال میره؛ درسته ؟!؟!؟
ممنونم از توجه همه ی شما.

RIG000
چهارشنبه 10 دی 1393, 16:12 عصر
شما باید یک جدول role ایجاد کنید که کد role را داشته باشه.
و یک جدول user ایجاد کنید که کد role در اون بشینه .
این روال کار هست.

kahkeshane2012
چهارشنبه 10 دی 1393, 16:16 عصر
این در حالتی که جدول ما یک به چند باشد؛ اگر که چند به چند باشه موضوع فرق میکنه :(

RIG000
چهارشنبه 10 دی 1393, 16:21 عصر
چرا باید چند به چند باشه؟ یعنی یه کاربر هم مدیر باشه هم یوزر؟ خب یه دفعه ای مدیرش کن که به همه چی دسترسی داشته باشه.

kahkeshane2012
چهارشنبه 10 دی 1393, 16:23 عصر
نه ؛شما در نظر بگیر در یک اداره یک کارمند هم مدیر بخش ایکس باشه هم عضو هئیت علمی باشه؛ در این صورت چند به چند باید بشه.

RIG000
چهارشنبه 10 دی 1393, 16:37 عصر
بهتر نیست تو جدول role بنویسی
کد 1 باشد user
کد 2 باشد مدیر
کد 3 باشد مدیر و هیت علمی
کد 4 باشد مدیر بخش 1 و هیت علمی
کد 5 باشد مدیر بخش 2
کد 6 مدیر بخش 1 و 2
و....
البته بهتره تمام روش ها رو بررسی کنید تا بهترین راه بدست بیاد بعد کد بزنید.
این شکلی که شما کار میکنید مجبورید که هی دنبال دها باشید و ...
بهتر بود در مورد تحلیلش از دوستان می پرسیدید بعد شروع به کد میکردید.

kahkeshane2012
چهارشنبه 10 دی 1393, 16:51 عصر
اینم روشیه ؛ اما به نوعی پیچوندن صورت مساله. ممنون از راهنمایتون.
بچه ها این همه صحبت کردیم اما حتی گوشه ای هم به مشکلی که داشتم اشاره نکردید :(