Сохраните данные флажка в SQL Server, используя MVC - PullRequest
0 голосов
/ 27 июня 2019

Я использую MVC и хочу сохранить данные флажка в логической форме на сервере SQL.Ошибка в модели формы клиента, когда я пытаюсь использовать представление Razor для модели флажков.

Ошибка:

CS0266: Не удается неявно преобразовать тип 'bool?'к "bool".Существует явное преобразование (вам не хватает приведения?)

Код контроллера:

public ActionResult SaveRecord(CustomerCount cc)
{
    try
    {
        CustomerCounterDBEntities1 dbs = new CustomerCounterDBEntities1();
        List<CustomerInfo> infos = dbs.CustomerInfoes.ToList();
        ViewBag.CustomerInfoList = new SelectList(infos, "Name", "Mobile");
        CustomerInfo ct = new CustomerInfo();
        ct.CustomerID = cc.CustomerID;
        ct.Name = cc.Name;
        ct.Mobile = cc.Mobile;
        ct.Email = cc.Email;
        ct.Comments = cc.Comments;
        ct.Western_Union = cc.Western_Union;
        ct.Ria = cc.Ria;
        ct.Money_Gram = cc.Money_Gram;
        ct.Intel = cc.Intel;
        ct.JazzCash = cc.JazzCash;
        ct.Contact = cc.Contact;
        ct.No_Business = cc.No_Business;
        dbs.CustomerInfoes.Add(ct);
        dbs.SaveChanges();
        int CustomerID = ct.CustomerID;
        return RedirectToAction("Index");
    }

Код модели:

namespace Customer_Counter.Models
{
    public class CustomerCount
    {
        [Key]
        public int CustomerID { get; set; }

        public string Name { get; set; }
        public string Mobile { get; set; }
        public string Email { get; set; }
        public string Comments { get; set; }
        public Boolean Western_Union { get; set; }
        public Boolean Ria { get; set; }
        public Boolean Money_Gram { get; set; }
        public Boolean Intel { get; set; }
        public Boolean JazzCash { get; set; }
        public Boolean Contact { get; set; }
        public Boolean No_Business { get; set; }
    }
}

CustomerInfo:

namespace Customer_Counter.Models
{
    using System;
    using System.Collections.Generic;

    public partial class CustomerInfo
    {
        public int CustomerID { get; set; }
        public string Name { get; set; }
        public string Mobile { get; set; }
        public string Email { get; set; }
        public string Comments { get; set; }
        public Nullable<bool> Western_Union { get; set; }
        public Nullable<bool> Ria { get; set; }
        public Nullable<bool> Money_Gram { get; set; }
        public Nullable<bool> Intel { get; set; }
        public Nullable<bool> JazzCash { get; set; }
        public Nullable<bool> Contact { get; set; }
        public Nullable<bool> No_Business { get; set; }
    }
}

CustomerForm View: // Только часть ошибки

@Html.CheckBoxFor(Model => Model.Western_Union)
@Html.CheckBoxFor(Model => Model.Ria)//error
@Html.CheckBoxFor(Model => Model.Money_Gram)//error
@Html.CheckBoxFor(Model => Model.Intel)//error
@Html.CheckBoxFor(Model => Model.JazzCash)//error
@Html.CheckBoxFor(Model => Model.Contact)//error
@Html.CheckBoxFor(Model => Model.No_Business)//error

Ответы [ 3 ]

1 голос
/ 27 июня 2019

У вас есть это в вашем CustomerCount классе (= таблица SQL?):

public Boolean Western_Union { get; set; }
public Boolean Ria { get; set; }
public Boolean Money_Gram { get; set; }
public Boolean Intel { get; set; }
public Boolean JazzCash { get; set; }
public Boolean Contact { get; set; }
public Boolean No_Business { get; set; }

, но это в вашем CustomerInfo классе (= модель?):

public Nullable<bool> Western_Union { get; set; }
public Nullable<bool> Ria { get; set; }
public Nullable<bool> Money_Gram { get; set; }
public Nullable<bool> Intel { get; set; }
public Nullable<bool> JazzCash { get; set; }
public Nullable<bool> Contact { get; set; }
public Nullable<bool> No_Business { get; set; }

Так что либо удалите все эти Nullable, либо преобразуйте значение:

// Explicit conversion as suggested by your error message:
ct.Western_Union = (bool)cc.Western_Union;
// Function getting the boolean value or false if null:
ct.Western_Union = cc.Western_Union.GetValueOrDefault();

Вы также можете избавиться от своего CustomerInfo класса и использовать CustomerCount в качестве модели.


Редактировать: Hiba T решил вашу проблему ( CheckBoxFor имеет эту перегрузку:

CheckBoxFor<TModel>(HtmlHelper<TModel>, Expression<Func<TModel,Boolean>>)

noteBoolean, а не Nullable<Boolean>), но вы все равно должны спросить себя, почему вы используете два (почти идентичных) класса для одного и того же материала.

0 голосов
/ 27 июня 2019

ur переменная должна быть истинной или ложной (не обнуляемой), проверьте вашу базу данных и эта ссылка может помочь вам: CheckBoxFor

0 голосов
/ 27 июня 2019

A "?" указывает на обнуляемый тип. Переменная bool может быть истинной или ложной. Обнуляемая переменная bool может иметь значение true, false или null. Таким образом, сопоставление с недействительным булом с ненулевым булом не может быть сделано неявно.

Но, честно говоря, я думаю, вам нужно немного почитать о c #, MVC и sql в целом ... ваш подход немного сбивает с толку, по крайней мере, мне.

...