ورود

View Full Version : مشکل هنگام ویرایش اطلاعات با ef و mvc



TheCoder
دوشنبه 10 تیر 1392, 13:48 عصر
کدهای ویرایش :

public ActionResult Update(FormCollection form)
{
InstituteDBContext db = new InstituteDBContext();
var query = db.User.Where(u => u.UserID == Int32.Parse((form["id"]).ToString())).SingleOrDefault();
query.UserFirstName = form["UserFirstName"];
query.UserLastName = form["UserLastName"];
db.SaveChanges();
return RedirectToAction("index");
}
پیغام خطا :

LINQ to Entities does not recognize the method 'Int32 Parse(System.String)' method, and this method cannot be translated into a store expression.

mo.esmp
دوشنبه 10 تیر 1392, 14:38 عصر
var id = var query = Int32.Parse((form["id"]).ToString()));
var query = db.User.Where(u => u.UserID == id).SingleOrDefault();

mo.esmp
دوشنبه 10 تیر 1392, 14:40 عصر
var id = Int32.Parse((form["id"]).ToString()));
var query = db.User.Where(u => u.UserID == id).SingleOrDefault();

TheCoder
دوشنبه 10 تیر 1392, 14:46 عصر
این به ذهن خودمم رسید اما این پیغام خطا رو میده ؟
Object reference not set to an instance of an object

ali_autumnal
دوشنبه 10 تیر 1392, 15:19 عصر
چرا FormCollection دریافت می کنید؟

وقتی مدل UserProfile رو داریم دقیقا این مدل (یا مدلی شبیه به این بنویسید مورد هایی که کاربر اجازه تغییرات رو داره بنویسید) رو ارسال و دریافت کنید تا تبدیل های بی مورد انجام ندهید. این تبدیل ها در کل بهینه نیستند.

برای مثال:



[HttpPost]
public ActionResult Edit(int id, Admin_MenuCreateOrEditModel model)
{
if (ModelState.IsValid)
{
var item = context.MenuModels.Find(id);
item.IsActive = model._Model.IsActive;
item.PageId = model._Model.PageId;
item.MenuDescription = model._Model.MenuDescription;
item.MenuName = model._Model.MenuName;
item.SortId = model._Model.SortId;
item.ParentId = model._Model.ParentId;
context.Entry(item).State = EntityState.Modified;
context.SaveChanges();
}
return RedirectToAction("Index");
}



از طرفی دستور

InstituteDBContext db = new InstituteDBContext();
رو هم در ابتدای کنترلر به صورت سراسری تعریف کنید.



public class MenuController : Controller
{
private readonly MyWebsiteDbContext context = new MyWebsiteDbContext();

farnooshhp
جمعه 28 تیر 1392, 15:02 عصر
شما به جای تبدیل فیلد به int کافی است که فیلد id را به اکشن edit ارسال کنید

public ActionResult Edit(int id

younesdoost
جمعه 28 تیر 1392, 16:09 عصر
از نظر من همون کار بهتر این که FormCollection رو ارسال کنید.آخه کد ویرایشه باید FormCollection باشه که بتونه آپدیت کنه از روش دیگه ولیکن بیاید ویو ویرایش رو از جنس مدلتون بسازید(که فیلد id توش integer هستش) که دیگه نیازی به تبدیل رشته به عددم نباشه.درست شبیه چیزی که آقای ali autumnal گفتن.