SQL サーバーからグリッドビューにデータをバインドしていますが、編集に問題があります。
ここに私のモデルコードがあります:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Data.Entity;
namespace Gridview_BugTracker.Models
{
public class BugTracker_DataHelper
{
public static List<BugTracker_DataHelper> GetList{get;set;}
public string ProjectId { get; set; }
public string projectName { get; set; }
public string Description { get; set; }
public string status { get; set; }
}
}
これが私のコントローラーコードです
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data;
using Gridview_BugTracker.Models;
using System.Data.SqlClient;
using System.Data.Entity;
namespace Gridview_BugTracker.Controllers
{
public class ProjectsController : Controller
{
//
// GET: /Projects/
public ActionResult Index()
{
var bugedlist = GetList();
return View(bugedlist);
}
[HttpGet]
public ActionResult Edit(int projectId)
{
BugTracker_DataHelper bugedit = new BugTracker_DataHelper();
var edit = EditList();
bugedit.ProjectId =Convert.ToString(projectId);
return View(edit);
}
public List<BugTracker_DataHelper> GetList()
{
var modelList = new List<BugTracker_DataHelper>();
using (SqlConnection conn = new SqlConnection(@"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=BugTracker;Data Source=SSDEV6\SQLEXPRESS"))
{
conn.Open();
SqlCommand dCmd = new SqlCommand("Select * from Projects", conn);
SqlDataAdapter da = new SqlDataAdapter(dCmd);
DataSet ds = new DataSet();
da.Fill(ds);
conn.Close();
for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
{
var model = new BugTracker_DataHelper();
model.ProjectId = ds.Tables[0].Rows[i]["ProjectId"].ToString();
model.projectName = ds.Tables[0].Rows[i]["projectName"].ToString();
model.Description = ds.Tables[0].Rows[i]["Description"].ToString();
model.status = ds.Tables[0].Rows[i]["Status"].ToString();
modelList.Add(model);
}
}
return modelList;
}
[HttpPost]
public ActionResult EditList()
{
var editlist = new List<BugTracker_DataHelper>();
using (SqlConnection editconn=new SqlConnection(@"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=BugTracker;Data Source=SSDEV6\SQLEXPRESS"))
{
editconn.Open();
var modeledit = new BugTracker_DataHelper();
SqlCommand ecmd = new SqlCommand("EditGetList", editconn);
ecmd.CommandType = CommandType.StoredProcedure;
ecmd.Parameters.Add("@projectID", SqlDbType.Int).Value = modeledit.ProjectId;
Object prjid = ecmd.ExecuteNonQuery();
editconn.Close();
editlist.Add(modeledit);
}
return View(editlist);
}
Gridview コード
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<IEnumerable<Gridview_BugTracker.Models.BugTracker_DataHelper>>" %>
<!DOCTYPE html>
<html>
<head runat="server">
<title>Index</title>
</head>
<body>
<div>
<h2>Index</h2>
<table>
<tr>
<th>
ProjectName
</th>
<th>
Status
</th>
</tr>
<% foreach (var item in Model) { %>
<tr>
<td>
<%:Html.LabelForModel(item.projectName) %>
</td>
<td>
<%:Html.LabelForModel(item.status) %>
</td>
<td>
<%: Html.ActionLink("Edit", "Edit", new { projectId = item.projectName})%> |
<%: Html.ActionLink("Details", "Details", new { projectId = item.Description })%> |
<%: Html.ActionLink("Delete", "Delete", new { projectId = item.status })%>
</td>
</tr>
<%} %>
</table>
</div>
</body>
</html>
ページ コードの編集:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/SiteMaster.Master" Inherits="System.Web.Mvc.ViewPage<Gridview_BugTracker.Models.BugTracker_DataHelper>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
editindex
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>editindex</h2>
<fieldset>
<legend>EDit</legend>
<div class="editor-label">
<%: Html.LabelFor(Model => Model.ProjectId) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model) %>
<%: Html.ValidationMessageFor(model => model.projectName) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Description) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.Description) %>
<%: Html.ValidationMessageFor(model => model.Description)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.status) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.status) %>
<%: Html.ValidationMessageFor(model => model.status) %>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
</asp:Content>
編集ボタンをクリックすると、次のエラーが表示されます。
「/」アプリケーションでサーバー エラーが発生しました。
パラメーター ディクショナリには、'Gridview_BugTracker.Controllers.ProjectsController' のメソッド 'System.Web.Mvc.ActionResult Edit(Int32)' の null 非許容型 'System.Int32' のパラメーター 'projectId' の null エントリが含まれています。オプションのパラメーターは、参照型または null 許容型であるか、オプションのパラメーターとして宣言する必要があります。パラメーター名: parameters 説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
誰でも助けてもらえますか?