“创建”和“编辑”视图共享的“部分视图”中的“主键”问题

时间:2010-07-13 08:07:39

标签: asp.net asp.net-mvc

我有一个部分视图(用户控件),由我的创建和编辑视图共享。当我在编辑视图中使用它时,我必须包含一个隐藏字段(Html.HiddenFor)以防止我的数据服务中出现“行已更改或未找到”错误,但是当我在创建视图中使用它时,我必须删除PK隐藏字段,以防止尝试插入标识列时出现错误。

在此应用程序中不使用标识列是不可行的,那么如何根据调用的操作“打开或关闭”PK隐藏字段?

邮政编码:

    [HttpPost]
    public ActionResult Edit(JobCardViewData viewData)
    {
        try
        {
            jobCardService.Update(viewData.JobCard);

修改视图摘录:

<% Html.RenderPartial("JobCardInput", Model); %>

部分摘录:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Poynting.Installation.Web.ViewData.JobCardViewData>" %>
<% using (Html.BeginForm())

2 个答案:

答案 0 :(得分:1)

  

当我在创建视图中使用它时,我   必须删除PK隐藏字段,以   防止尝试插入时出错   进入身份栏。进入身份栏。

保留隐藏字段并更新Create操作以检查值是0还是null(我假设JobCard是Create操作的参数类型)。另一个想法是重新创建一个新的JobCard对象,它不包括设置id值,并将新对象发送到jobCardService创建方法。

  

那我怎么能'切换'PK隐藏   字段打开或关闭取决于哪个   已经调用了行动?

您可以创建一个HtmlHelper来为您渲染隐藏字段。检查ViewContext RouteData集合,如果需要,操作名称相应地输出隐藏字段。 (伪代码..)

public static MvcHtmlString HiddenTest(this HtmlHelper htmlHelper, string name)
{
    string currentAction = htmlHelper.ViewContext.RouteData.Values["action"].ToString();
    if (currentAction = "Edit"){
     return htmlHelper.Hidden(htmlHelper, name);
    }
   return null;
}

答案 1 :(得分:0)

你可以在网址上找到你的PK吗?

ThingController /创建

ThingController /编辑/ 1234