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