【问题标题】:The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'Int32' for method 'Edit(Int32)'参数字典包含方法“Edit(Int32)”的不可空类型“Int32”的参数“id”的空条目
【发布时间】:2014-09-16 05:36:45
【问题描述】:

我正在使用 linq to sql 执行 CRUD 操作。但是,在单击编辑、详细信息或删除时,它给了我错误,即“参数字典包含方法 'System.Web.Mvc.ActionResult Edit(Int32 )' 在 'CRUD_using_LinQ_to_SQL_in_MVC.Controllers.OTDController' 中。可选参数必须是引用类型、可空类型或声明为可选参数。 我检查了解决方案,发现在运行应用程序 url 时没有获取 ID 参数。但我不明白我应该在我的代码中改变什么..你能帮我吗...

我的控制器代码:

using System;

命名空间 CRUD_using_LinQ_to_SQL_in_MVC.Controllers { 公共类 OTDController : 控制器 {

    private IOTddataRepository repository;
    public OTDController()
        : this(new OtdDataRepository())
    {
    }

    public OTDController(IOTddataRepository _repository)
    {
        repository = _repository;
    }


    //-----------------------Index--------------------------

    public ActionResult Index()
    {
        var otddata = repository.Getallotddata();
        return View(otddata);
    }


    //-----------------------Details--------------------------


    public ActionResult Details(int id)
    {
        OtdModelClass otdmodel = repository.Getotddatabysrno(id);
        return View(otdmodel);
    }


    //-----------------------Create--------------------------

    public ActionResult Create()
    {
        return View(new OtdModelClass());
    }

    [HttpPost]
    public ActionResult Create(OtdModelClass otdmodel)
    {
        try
        {
            if (ModelState.IsValid)
            {
                repository.Insertotddata(otdmodel);
                return RedirectToAction("Index");
            }
        }
        catch (DataException)
        {
            ModelState.AddModelError("", "Problem in Data Saving");
        }
        return View(otdmodel);
    }


    //-----------------------EDIT--------------------------

    public ActionResult Edit(int id)
    {
        OtdModelClass otdmodel = repository.Getotddatabysrno(id);
        return View(otdmodel);
    }

    [HttpPost]
    public ActionResult Edit(OtdModelClass otdclass)
    {
        try
        {
            if (ModelState.IsValid)
            {
                repository.Updateotddata(otdclass);
                return RedirectToAction("Index");
            }
        }
        catch (DataException)
        {
            ModelState.AddModelError("", "Problem in editing and Updating data");
        }
        return View(otdclass);
    }



    //-----------------------Delete--------------------------

    public ActionResult Delete(int id, bool? savechangeserror)
    {
        if (savechangeserror.GetValueOrDefault())
        {
            ViewBag.ErrorMessage = "Problem in Deleting";
        }

        OtdModelClass otdmodel = repository.Getotddatabysrno(id);
        return View(otdmodel);
    }

    [HttpPost, ActionName("Delete")]
    public ActionResult DeleteConfirmed(int id)
    {
        try
        {
            OtdModelClass otdmodel = repository.Getotddatabysrno(id);
            repository.Deleteotddata(id);
        }
        catch (DataException)
        {
            return RedirectToAction("Delete", new System.Web.Routing.RouteValueDictionary { 
                                    {"id",id},
                                    {"SaveChangesError",true}});
        }
        return RedirectToAction("Index");
    }

}

}

我的 OTD 课程代码:

public class OtdDataRepository : IOTddataRepository
{
    private MVCLoginMasterLogDataClassesDataContext otdcontextobj;

    public OtdDataRepository()
    {
        otdcontextobj = new MVCLoginMasterLogDataClassesDataContext();
    }


    public IEnumerable<OtdModelClass> Getallotddata()
    {
        IList<OtdModelClass> otddatalist = new List<OtdModelClass>();
        var myselectallquery = from otduser in otdcontextobj.tbl_MVC_Login_Master_Logs select otduser;
        var otd = myselectallquery.ToList();
        foreach (var otddata in otd)
        {
            otddatalist.Add(new OtdModelClass()
            {
                Srno=Convert.ToInt32(otddata.Srno),
                MemberCode = otddata.MemberCode,
                LoginID = otddata.LoginID,
                OTDPassword = otddata.OTDPassword,
                BBSID = otddata.BBSID,
                IPAddress = otddata.IPAddress,
                ServerType = otddata.ServerType,
                OTDStatus = otddata.OTDStatus,
                RemoteIP = otddata.RemoteIP,
                RemotePort = otddata.RemotePort,
                AllowDownload = otddata.AllowDownload,
                OTDTimeStamp = otddata.OTDTimeStamp,
                MemberType = otddata.MemberType,
                EQ = otddata.EQ,
                EQD = otddata.EQD,
                BFX = otddata.BFX,
                SLB = otddata.SLB,
                Others = otddata.Others
            });
        }
        return otddatalist;
    }


    public OtdModelClass Getotddatabysrno(int id)
    {
        var getotddataquery = from otduser in otdcontextobj.tbl_MVC_Login_Master_Logs
                              where otduser.Srno == id
                              select otduser;
        var otddata = getotddataquery.FirstOrDefault();
        var otdmodel = new OtdModelClass()
        {
            Srno = Convert.ToInt32(otddata.Srno),
            MemberCode = otddata.MemberCode,
            LoginID = otddata.LoginID,
            OTDPassword = otddata.OTDPassword,
            BBSID = otddata.BBSID,
            IPAddress = otddata.IPAddress,
            ServerType = otddata.ServerType,
            OTDStatus = otddata.OTDStatus,
            RemoteIP = otddata.RemoteIP,
            RemotePort = otddata.RemotePort,
            AllowDownload = otddata.AllowDownload,
            OTDTimeStamp = otddata.OTDTimeStamp,
            MemberType = otddata.MemberType,
            EQ = otddata.EQ,
            EQD = otddata.EQD,
            BFX = otddata.BFX,
            SLB = otddata.SLB,
            Others = otddata.Others
        };
        return otdmodel;
    }

    public void Insertotddata(OtdModelClass otdmodel_obj)
    {
        var empdata = new tbl_MVC_Login_Master_Log()
        {
            Srno = Convert.ToInt32(otdmodel_obj.Srno),
            MemberCode = otdmodel_obj.MemberCode,
            LoginID = otdmodel_obj.LoginID,
            OTDPassword = otdmodel_obj.OTDPassword,
            BBSID = otdmodel_obj.BBSID,
            IPAddress = otdmodel_obj.IPAddress,
            ServerType = otdmodel_obj.ServerType,
            OTDStatus = otdmodel_obj.OTDStatus,
            RemoteIP = otdmodel_obj.RemoteIP,
            RemotePort = otdmodel_obj.RemotePort,
            AllowDownload = otdmodel_obj.AllowDownload,
            OTDTimeStamp = otdmodel_obj.OTDTimeStamp,
            MemberType = otdmodel_obj.MemberType,
            EQ = otdmodel_obj.EQ,
            EQD = otdmodel_obj.EQD,
            BFX = otdmodel_obj.BFX,
            SLB = otdmodel_obj.SLB,
            Others = otdmodel_obj.Others
        };

        otdcontextobj.tbl_MVC_Login_Master_Logs.InsertOnSubmit(empdata);
        otdcontextobj.SubmitChanges();
    }


    public void Deleteotddata(int id)
    {
        tbl_MVC_Login_Master_Log otd_deletelog = otdcontextobj.tbl_MVC_Login_Master_Logs.Where(otduser => otduser.Srno == id).SingleOrDefault();
        otdcontextobj.tbl_MVC_Login_Master_Logs.DeleteOnSubmit(otd_deletelog);
        otdcontextobj.SubmitChanges();
    }


    public void Updateotddata(OtdModelClass otdmodel_obj)
    {
        tbl_MVC_Login_Master_Log otd_updatelog = otdcontextobj.tbl_MVC_Login_Master_Logs.Where(otduser=>otduser.Srno==otdmodel_obj.Srno).SingleOrDefault();
        otd_updatelog.Srno = otdmodel_obj.Srno;
        otd_updatelog.MemberCode = otdmodel_obj.MemberCode;
        otd_updatelog.LoginID = otdmodel_obj.LoginID;
        otd_updatelog.OTDPassword = otdmodel_obj.OTDPassword;
        otd_updatelog.BBSID = otdmodel_obj.BBSID;
        otd_updatelog.IPAddress = otdmodel_obj.IPAddress;
        otd_updatelog.ServerType = otdmodel_obj.ServerType;
        otd_updatelog.OTDStatus = otdmodel_obj.OTDStatus;
        otd_updatelog.RemoteIP = otdmodel_obj.RemoteIP;
        otd_updatelog.RemotePort = otdmodel_obj.RemotePort;
        otd_updatelog.AllowDownload = otdmodel_obj.AllowDownload;
        otd_updatelog.OTDTimeStamp = otdmodel_obj.OTDTimeStamp;
        otd_updatelog.MemberType = otdmodel_obj.MemberType;
        otd_updatelog.EQ = otdmodel_obj.EQ;
        otd_updatelog.EQD = otdmodel_obj.EQD;
        otd_updatelog.BFX = otdmodel_obj.BFX;
        otd_updatelog.SLB = otdmodel_obj.SLB;
        otd_updatelog.Others = otdmodel_obj.Others;
        otdcontextobj.SubmitChanges();
    }
}

你能帮帮我吗...

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    框架告诉您,您单击以调用 EditDelete 操作方法的链接未提供名为 id 的 int 参数,该操作方法期望在提交的数据中的某处找到该参数.这通常在 URL、查询字符串或提交的变量中提供。

    如果这还不足以让您发现问题,请将您的视图代码专门发布在与链接相关的部分。

    【讨论】:

    • 嗨@JTMon...感谢您的快速回复...我忘记在 ActionLink 中添加“new { id=item.Srno }”以进行编辑、详细信息和删除...跨度>
    猜你喜欢
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    相关资源
    最近更新 更多