سورس اکشن حذف در mvc4 رو میخواستم لطفا کمکم کنید
سورس اکشن حذف در mvc4 رو میخواستم لطفا کمکم کنید
به شکل ساده:
public ActionResult Delete(int id)
{
if (ModelState.IsValid)
{
var item = context.SliderModels.Find(id);
context.SliderModels.Remove(item);
context.SaveChanges();
}
return RedirectToAction("Index");
}
context چیه؟ form collection را نیز بنویسید.
context شئی از dbContext شما هست
formCollection هم به همین صورت هست. فقط با نام کلید بایستی بخونید
در هنگام حذف و ویرایش اطلاعات برای سادگی و خوانا بودن کد بهتره کلید اصلی رو به کنترلر ارسال کنید و عملیات رو انجام بدید.
البته در Action مربوط به Delete نیازی به چک کردن ModelState.IsValid نیست.
سلام
هم باید چک بشه که آیتم وجود داشته باشه و هم نوع درخواست باید محدود به HttpPost باشه. (در این مقاله، قسمت "یک نکته امنیتی" را مطالعه بفرمایید.)
نکته [HttpPost] جالب بود.
متشکرم
هر کاری میکنم sliderModel رو نمیاره
بعد از اینکه اسم جدول خودم را میزنم متد find() و remove را نمیاره
کدهایی که نوشته اید رو بزارید.
dbcontext رو هم بزارید
این تا اینجاشpublic ActionResult Delete(int? id)
{
var q = db.tbl_students.Where(c => c.id == id).SingleOrDefault();
return View(q);
}
public ActionResult remove(FormCollection form3)
{
if (ModelState.IsValid)
{
var item =db.tbl_students
کلاس dbcontext رو هم قرار بدید
اگه میتونید اکشن حذف را کدشو برام بذارید
در post شماره 2 که نوشته شده
کلاس dbcontext رو کجا باید قرار بدم لطفا منظورتون را واضح تر بگید
امکانش هست کدی که نوشتم رو ویرایش کنید و درستش رو بنویسید؟ ممنون میشم
متدهای Remove و Find متدهای کلاس DbSet هستند. وقتی مدل شما از نوع DbSet تعریف میشه خودبه خود این متدها رو ارث بری میکنه
public DbSet<UserProfile> UserProfiles { set; get; }
کلاس DbSet در چه فضای نامی تعریف میشه؟
این فضای نام هم تعریف کردم اما کلاس dbSet را نیاورد
یعنی شما همچین چیزی می نویسید خطا میده!؟
public DbSet<UserProfile> UserProfiles { set; get; }
بله دقیقا همینطوره
هنگام ایجاد پروژه کدام یک از گزینه های ایجاد پروژه رو انتخاب کردید؟
مطمئن هستید Entity framwork رو نصب کردید؟
این مسیر رو میرم: file> new> project> web> asp.net mvc4 web application
این لینک رو ببینید
الان درست شد ولی موقع کامپایل با این ارور مواجه میشم: The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult remove(Int32, System.Web.Mvc.FormCollection)' in 'university_mvc.Controllers.universityController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters
دوست عزیز به نظرم شما باید یه دور ASP.NET MVC رو از اول و با دقت بیشتر بخونید + Entity Framework
این کل کد سورس اکشن حذفی هست که نوشتم لطفا اشکالاتش را بگویید: در ضمن st شیئی از کلاس جدولم هست و student شیئی از کلاس DbSet هست و context هم نیز شیئی از کلاس DbContext هست.
public ActionResult Delete(int id=0)
{
tbl_student st = student.Find(id);
if (st == null)
{
return HttpNotFound();
}
return View(st);
}
public ActionResult remove(int id=0)
{
tbl_student st = student.Find(id);
if (st == null)
{
return HttpNotFound();
}
student.Remove(st);
context.SaveChanges();
return RedirectToAction("index");
}
}
}
یا اسم remove رو بکنید Delete و بالاش فقط [HttpPost] بذارید یا اینکه اگر می خواهید همین اسم (remove) باشه بالاش علاوه بر [HttpPost] این رو هم باید بذارید: [ActionName("Delete")]
قطعه کد کامل:
[HttpGet]
public ActionResult Delete(int id=0)
{
var st = context.Students.Find(id);
if (st == null)
{
return HttpNotFound();
}
return View(st);
}
[ActionName("Delete")]
[HttpPost]
public ActionResult remove(int id)
{
var st = context.Students.Find(id);
if (st == null)
{
return HttpNotFound();
}
context.Students.Remove(st);
context.SaveChanges();
return RedirectToAction("index");
}
آخرین ویرایش به وسیله mze666 : پنج شنبه 13 تیر 1392 در 19:27 عصر
الان به این قسمتtbl_student st = student.Find(id);ارور می گیره و میگه: Object reference not set to an instance of an object.
اوه اوه حواسم نبود. باید بنویسید context.Students.Remove(st) و برای گرفتنش هم همینطور context.Students.Find(id)
الان توی کد بالا هم درستش می کنم.
میبخشید مگه DbContext نباید به صورت public dbcontext; تعریف بشه؟
اول کلاس کنترلر مربوطه به صورت زیر تعریف میشه:
private MyContext context = new MyContext();
که میتونید توی using هم بنویسید مثل کد زیر:
using (var context = new MyContext())
{
// ارتباط با ديتابيس
}
MyContext اسم جدولمون هست دیگه؟
نه دیگه! MyContext اسم کلاسی هست که از DbContext مشتق شده. شما از Entity Framwork Code First استفاده کردید یا Database First (فایل edmx)؟
من از DbSet استفاده کردم و همچنین با linq برنامه ام رو دارم می نویسم
یعنی چی از DbSet استفاده می کنید؟ DbSet رو کجا تعریف کردید؟ اصلاً context که توی کدهاتون نوشته بودید چی بود؟!
به هر حال اگر از Entity Framework استفاده نمی کنید من هم نمی تونم کمکتون کنم.
شرمنده.
اولا: dbSet رو در کلاس کنترلر تعریف کردم
ثانیا:من اومدم یک dbContext هم تعریف کردم
ثالثا از Entity FrameWork استفاده میکنم چون فضای نام System.Data.Entity رو تعریف کردم.