تاپیک مورد نظر بسته شده است
سلام دوستان سال نو مبارک
توی دیتابیس یه فیلد دارم که از نوع bit و notNull هست. موقع ویرایش وقتی چک باکس مربوط به این فیلد اگه تیک خورده نباشه و بخوام تیک بزنم و post کنم ارور The value 'on' is not valid for میده. اما اگه تیک خورده باشه و تیکش رو وردارم مشکلی پیش نمیاد
کد html رو بصورت زیر میزارم ولی اصلا چک باکس کار نمی کنه
@Html.CheckBoxFor(model => model.IsBond)
اما اگه بصورت زیر بذارم خطای بالا رو میده؟!!
@if (Model.IsBond) { <input class="check-box" id="IsBond" name="IsBond" type="checkbox" checked="checked"> } else { <input class="check-box" id="IsBond" name="IsBond" type="checkbox"> }
کل کد مربوط به چک باکس در ویو و کنترلر اینه:
<div class="form-group"> <label class="control-label col-md-2"></label> <div class="col-md-10"> <div class="checkbox"> <div class="checkbox checkbox-replace checkbox-primary"> @if (Model.IsBond) { <input class="check-box" id="IsBond" name="IsBond" type="checkbox" checked="checked"> } else { <input class="check-box" id="IsBond" name="IsBond" type="checkbox"> } @*@Html.CheckBoxFor(model => model.IsBond)*@ <label for="IsBoend"> در دست پیگیری</label> </div> @Html.ValidationMessageFor(model => model.IsBond, "", new { @class = "text-danger" }) </div> </div> </div>
// GET: Projects/Edit/5 public ActionResult Edit(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Project project = db.Projects.Find(id); if (project == null) { return HttpNotFound(); } //بدست آوردن آی دی شرکت بر اساس نام کاربر لاگین کرده برای int CoId = db.Users.FirstOrDefault(u => u.UserName == User.Identity.Name).Company.CompanyId; ViewBag.PhaseId = new SelectList(db.Phases.Where(ph => ph.CompanyId == CoId), "PhaseID", "Name", project.PhaseId); return View(project); } // POST: Projects/Edit/5 // To protect from overposting attacks, please enable the specific properties you want to bind to, for // more details see https://go.microsoft.com/fwlink/?LinkId=317598. [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Include = "ProjectID,Name,Mobile,Tell,Email,Address,PhaseId,Floor,IsBond,Skelet,Description")] Project project) { var t = project.IsBond; if (ModelState.IsValid) { db.Entry(project).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } //بدست آوردن آی دی شرکت بر اساس نام کاربر لاگین کرده برای int CoId = db.Users.FirstOrDefault(u => u.UserName == User.Identity.Name).Company.CompanyId; ViewBag.PhaseId = new SelectList(db.Phases.Where(ph => ph.CompanyId == CoId), "PhaseID", "Name", project.PhaseId); return View(project); }
کد های مدل Project را قرار بدید.
using System.ComponentModel; using System.Web.Mvc; using System.Web.Mvc.Html; namespace Labkhand.Models { using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Data.Entity.Spatial; [Table("Project")] [DisplayName("کاربر")] [DisplayPluralName("کاربران")] public partial class Project { [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] public Project() { Events = new HashSet<Event>(); } [Key] public int ProjectID { get; set; } [Display(Name = "نام پروژه")] [Required(AllowEmptyStrings = false, ErrorMessage = "{0} را وارد نمایید")] [MaxLength(150, ErrorMessage = "{0} بیشتر از {1} کاراکتر می باشد")] [MinLength(3, ErrorMessage = "{0} کمتر از {1} کاراکتر می باشد")] public string Name { get; set; } [Display(Name = "همراه")] [MaxLength(12, ErrorMessage = "{0} بیشتر از {1} کاراکتر می باشد")] [MinLength(11, ErrorMessage = "{0} کمتر از {1} کاراکتر می باشد")] [RegularExpression(@"[0][9]\d{9}", ErrorMessage = "{0} را به درستی وارد نمایید با 09 شروع شود و 11 شماره باشد")] public string Mobile { get; set; } [Display(Name = "تلفن")] [MaxLength(12, ErrorMessage = "{0} بیشتر از {1} کاراکتر می باشد")] [MinLength(11, ErrorMessage = "{0} کمتر از {1} کاراکتر می باشد")] [RegularExpression(@"[0]\d{10}", ErrorMessage = "{0} را به درستی وارد نمایید با 09 شروع شود و 11 شماره باشد")] public string Tell { get; set; } [Display(Name = "ایمیل")] [MaxLength(150, ErrorMessage = "{0} بیشتر از {1} کاراکتر می باشد")] [MinLength(3, ErrorMessage = "{0} کمتر از {1} کاراکتر می باشد")] [RegularExpression(@"[\w\-_]+[@][\w\-\._]+[\.][\w]{2,7}", ErrorMessage = "{0} را به درستی وارد نمایید")] public string Email { get; set; } [Display(Name = "آدرس")] [MinLength(3, ErrorMessage = "{0} کمتر از {1} کاراکتر می باشد")] public string Address { get; set; } [Display(Name = "مرحله پروژه")] [Required(ErrorMessage = "{0} را انتخاب نمایید")] public int PhaseId { get; set; } [Display(Name = "تعداد طبقات")] public int? Floor { get; set; } [Display(Name = "در دست پیگیری")] public bool IsBond { get; set; } [Display(Name = "نوع اسکلت")] [MaxLength(20, ErrorMessage = "{0} بیشتر از {1} کاراکتر می باشد")] [MinLength(3, ErrorMessage = "{0} کمتر از {1} کاراکتر می باشد")] public string Skelet { get; set; } [Display(Name = "توضیحات")] [Column(TypeName = "ntext")] [AllowHtml] public string Description { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] public virtual ICollection<Event> Events { get; set; } public virtual Phase Phase { get; set; } } }
شما باید به جای استفاده از صفت checked باید از value استفاده کنید به شکل زیر:
@if (Model.IsBond) { <input class="check-box" id="IsBond" name="IsBond" type="checkbox" value="ture"> } else { <input class="check-box" id="IsBond" name="IsBond" type="checkbox" value="false"> }
فقط یادم رفت بگم اگه کد اون چک باکس رو بصورت زیر بذارم حل میشه:
<div class="form-group"> @Html.LabelFor(model => model.IsBond, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> <div class="checkbox"> @Html.EditorFor(model => model.IsBond) @Html.ValidationMessageFor(model => model.IsBond, "", new { @class = "text-danger" }) </div> </div> </div>
فقط مشکل اینجاست که من میخوام از ظاهر چک باکس خودم استفاده کنم
از پاسخ قبلی بنده استفاده کنید مشکل حل می شود.
ارور رفع شد فقط چه مقدار true باشه و چه false در هر دو صورت چک باکس داخل edit رو بدون تیک نشون میده حالا اگه تیک رو بزنم بعد از پست به index میره ولی توی دیتابیس true نمیشه. checked رو دوباره به کد شما اضافه کردم ولی اینم فقط زمانی کار میکنه که بخوای تیک چک باکس رو برداری. یعنی اگه false باشه بخوای true کنی جواب نمیده ولی برعکسش کار می کنه
مشکل حل شد فقط کد مربوط رو به این شکل تغییر دادم:
@if (Model.IsBond) { <input checked="checked" class="check-box" id="IsBond" name="IsBond" type="checkbox" value="ture"> } else { <input class="check-box" id="IsBond" name="IsBond" type="checkbox" value="ture"> }
هیچ کاربری تا کنون از این پست تشکر نکرده است
تاپیک مورد نظر بسته شده و امکان درج پاسخ وجود ندارد
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)