首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在MVC中编辑视图记录?

如何在MVC中编辑视图记录?
EN

Stack Overflow用户
提问于 2018-08-13 01:50:36
回答 1查看 0关注 0票数 0

我想编辑记录,但我无法打开Edit局部视图。当我点击Edit链接时,它发送给我TrackerId但我没有在模型中看到任何记录。这是错误:

System.Data.SqlClient.SqlException:'过程或函数'GetUpdateHorseTracker'期望参数'@horseId',这是未提供的。

调节器:

代码语言:javascript
复制
[HttpGet]
public ActionResult Edit(int TrackerId)
{
    ClsHorseTracker clsHorseTracker = new ClsHorseTracker();

    var model = horseTrackerDetails.EditHTRecord(clsHorseTracker).Find(s => s.TrackerId == TrackerId);
    return PartialView("_pEdit", model);
}

方法:

代码语言:javascript
复制
 public List<ClsHorseTracker> EditHTRecord(ClsHorseTracker clsHorseTracker)
        {
            List<ClsHorseTracker> cHorse = new List<ClsHorseTracker>();
            SqlParameter[] prms = new SqlParameter[3];
            string sSQL;
            sSQL = "exec HorseTrackerUpdate @TrackerId";
            prms[0] = new SqlParameter("@TrackerId", SqlDbType.Int);
            prms[0].Value = clsHorseTracker.TrackerId;
            prms[1] = new SqlParameter("@horseId", SqlDbType.Int);
            prms[1].Value = clsHorseTracker.HorseId;
            prms[2] = new SqlParameter("@horsetype", SqlDbType.Int);
            prms[2].Value = clsHorseTracker.HorseTypeId;
            ds = clsUtilities.CreateCommandwithParams(sSQL, prms);
            DataTable dataTable = ds.Tables[0];
            foreach (DataRow dr in dataTable.Rows)
            {
                cHorse.Add(
                    new ClsHorseTracker
                    {

                        HorseId = Convert.ToInt32(dr["HorseId"]),
                       HorseTypeId = Convert.ToInt32(dr["horsetype"])

                    });
            }
            return cHorse;
        }

    }
 public DataSet CreateCommandwithParams(string queryString, SqlParameter[] prms)
        {
            string mConnString = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString;
            using (SqlConnection conn = new SqlConnection(mConnString))
            {
                SqlCommand cmd = new SqlCommand(queryString, conn);
                cmd.CommandType = CommandType.Text;
                if (prms != null)
                {
                    foreach (SqlParameter p in prms)
                    {
                        cmd.Parameters.Add(p);
                    }
                }
                DataSet ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = cmd;
                conn.Open();
                da.Fill(ds);
                return ds;
            }

        }

局部视图:

代码语言:javascript
复制
@foreach (var item in Model)
            {
                <tr>
                    <td>
                        @item.HorseId
                    </td>

                    <td>
                        @item.HorseName
                    </td>
                    <td>
                        @item.Sire
                    </td>
                    <td>
                        @item.Dam
                    </td>
                    <td>
                        @item.HorseTypeName
                    </td>

                    <td>
                        @Ajax.ActionLink("Edit", "Edit", "HorseTracker", new { TrackerId = @item.TrackerId}, new AjaxOptions { UpdateTargetId = "div-for-partial" }, null) |


                    </td>
                </tr>

程序:

代码语言:javascript
复制
Alter PROCEDURE [dbo].[HorseTrackerUpdate]
    @TrackerId int,
    @horsetype int, 
    @updatedby varchar(50),
    @updatedon datetime,
    @notes varchar(500)

AS
BEGIN
    SET NOCOUNT ON;
    update HorseTracker
    set 
        HorseType=isnull(@horsetype,HorseType),
        UpdatedBy=ISNULL(@updatedby,UpdatedBy),
        UpdatedOn=ISNULL(@updatedon,UpdatedOn),
        Notes=ISNULL(@notes,Notes)
        where TrackerId=@TrackerId 
      END
EN

回答 1

Stack Overflow用户

发布于 2018-08-13 11:21:31

假设你有这样的GetUpdateHorseTracker存储过程:

代码语言:javascript
复制
ALTER PROCEDURE [schemaName].GetUpdateHorseTracker
   @TrackerId INT,
   @horseId INT,
   @horsetype INT
AS
BEGIN
   -- select statement here
END

然后,你应该包括所有这些声明的过程参数,因为未设置这些参数的默认值:

代码语言:javascript
复制
SqlParameter[] prms = new SqlParameter[3];

// include all parameters
string sSQL = "exec GetUpdateHorseTracker @TrackerId, @horseId, @horseType";
prms[0] = new SqlParameter("@TrackerId", SqlDbType.Int);
prms[0].Value = clsHorseTracker.TrackerId;
prms[1] = new SqlParameter("@horseId", SqlDbType.Int);
prms[1].Value = clsHorseTracker.HorseId;
prms[2] = new SqlParameter("@horsetype", SqlDbType.Int);
prms[2].Value = clsHorseTracker.HorseTypeId;

如果要在SqlCommand查询字符串中不指定某个参数,则必须按存储过程文档中的说明设置其默认值:

如果为参数定义了默认值,则可以在不指定该参数的值的情况下执行该过程。默认值必须是常量,或者可以为NULL。

此外,如果要直接使用参数执行存储过程,请设置cmd.CommandType = CommandType.StoredProcedure而不是cmd.CommandType = CommandType.Text

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100002091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档