当前位置:编程学习 > C#/ASP.NET >>

OrderedDictionary 是只读的,无法修改。

插入新闻,选择新闻类别,类别是dropdownlist绑定objectdatasource,objectdatasource绑定newsService.cs中的addNews方法,在ObjectDataSource1_Inserting方法中利用e.inputParameters[]将下拉列表中的值传入,结果报错,OrderedDictionary 是只读的,无法修改。 
----------------------------------
NewsService.cs
----------------------------------
public bool AddNews(NewsClass news)
        {
            if (String.IsNullOrEmpty(news.NewsTitle))
                throw new ArgumentException("NewsTitle cannot be null or an empty string.");
            if (String.IsNullOrEmpty(news.NewsContent))
                throw new ArgumentException("NewsContent cannot be null or an empty string.");

            SqlConnection conn = new SqlConnection(_connectionString);
            SqlCommand cmd = new SqlCommand("INSERT INTO t_news " +
                                                "  (newsTitle, newsContent,source,author,newsTypeId) " +
                                                "  Values(@newsTitle, @newsContent, @source,@author,@newsTypeId); " +
                                                "SELECT @newsId = SCOPE_IDENTITY()", conn);
            cmd.Parameters.Add("@newsTitle", SqlDbType.NVarChar, 50).Value = news.NewsTitle;
            cmd.Parameters.Add("@newsContent", SqlDbType.NVarChar, 500).Value = news.NewsContent;
            cmd.Parameters.Add("@source", SqlDbType.NVarChar, 50).Value = news.Source;
            cmd.Parameters.Add("@author", SqlDbType.NVarChar, 50).Value = news.Author;
            cmd.Parameters.Add("@newsTypeId", SqlDbType.Int).Value = news.NewsTypeId;
            SqlParameter p = cmd.Parameters.Add("@newsId", SqlDbType.Int);
            p.Direction = ParameterDirection.Output;

            int newsId = 0;

            try
            {
                conn.Open();

                cmd.ExecuteNonQuery();

                newsId = (int)p.Value;
            }
            catch (SqlException e)
            {
                // Handle exception.
            }
            finally
            {
                conn.Close();
            }

            if (newsId > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
--------------------------
addNews.aspx.cs
--------------------------
protected void ObjectDataSource1_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
    {
        DropDownList ddl=(DropDownList)this.FormView1.FindControl("DropDownList1");
        e.InputParameters["newsTypeId"] = Convert.ToInt32(ddl.SelectedValue);
    }

OrderedDictionary 是只读的,无法修改。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.NotSupportedException: OrderedDictionary 是只读的,无法修改。

源错误: 


行 33:     {
行 34:         DropDownList ddl=(DropDownList)this.FormView1.FindControl("DropDownList1");
行 35:         e.InputParameters["newsTypeId"] = Convert.ToInt32(ddl.SelectedValue);
行 36:     }
行 37: }
 
--------------------编程问答-------------------- InputParameters是ObjectDataSource的参数,不是cmd的参数,你的这种方式是传入实体类,没有办法输入参数,你可以考虑用session传值。 --------------------编程问答-------------------- 这用session怎么传值,你能不能帮我代码改一下.... --------------------编程问答-------------------- 其它参数在哪里赋值的?
在那里对newsTypeId进行赋值可以吗? --------------------编程问答-------------------- 其他参数是用formView拖出来,然后绑定objectdatasource,然后自动赋值的,我在formview里面把类别的文本框改成下拉列表了,自定义控件的话,就不能自动赋值了 --------------------编程问答-------------------- 用ConrtolParameter试一试

参考

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.controlparameter(v=VS.100).aspx
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,