Asp.net 创建和编辑视图共享的局部视图中的主键存在问题

Asp.net 创建和编辑视图共享的局部视图中的主键存在问题,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,我有一个由我的创建和编辑视图共享的局部视图(用户控件)。当我在编辑视图中使用它时,我必须包含一个隐藏字段(Html.HiddenFor),以防止数据服务中出现“行已更改或未找到”错误,但当我在创建视图中使用它时,我必须删除PK隐藏字段,以防止在尝试插入标识列时出错 在这个应用程序中不使用标识列是不可行的,所以如何根据调用的操作“切换”PK隐藏字段 操作后代码: [HttpPost] public ActionResult Edit(JobCardViewData viewData

我有一个由我的创建和编辑视图共享的局部视图(用户控件)。当我在编辑视图中使用它时,我必须包含一个隐藏字段(
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())
编辑视图摘录:

    [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())

部分摘录:

    [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())


你能在url中有你的PK吗

ThingController/创建

ThingController/Edit/1234

当我在“创建”视图中使用它时 必须删除PK隐藏字段,才能 防止在尝试插入时出错 输入标识列。输入标识列

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

那么,我如何“切换”隐藏的PK 字段打开或关闭取决于 是否已调用操作

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


在“获取编辑”操作中,它位于url(值1)中,但当我单击“保存”时,在“发布编辑”操作中,它在url中设置为0,除非我为其包含隐藏字段。在执行保存的“创建发布”中,保存数据并获取id,重定向到编辑页面,并使用id@Anthony,我不尝试在创建后编辑。我正在尝试从列表中编辑我的索引视图,当我调用edit时,我有id。是否指定表单发布url?您可以发布部分和post操作的代码吗?您的id位于JobCardViewData对象上?如果不进行更新,则只更新子对象JobCardViewData.JobCardmy这里的第一个建议问题是JobCardId为int,因此它从不为null,并且控制器从视图(使用隐藏字段时)返回的值为0,这与jobCard一起传递给服务。你的第二个看起来不错,实际上我已经做了很多,但没有加入helper。谢谢完全同意第一个选项-int永远不会为null,但是在控制器中,您可以检查它是否为0,然后根据发布的值重新创建一个新的JobCard对象。