2010-07-13 29 views
0

我有我的創建和編輯視圖共享的部分視圖(用戶控件)。當我在編輯視圖中使用它時,必須包含隱藏字段(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()) 

回答

1

當我在創建視圖使用它,我 必須刪除PK隱藏字段,以 防止發生錯誤,在試圖插入 到標識列中。

保留隱藏字段和更新創建動作檢查,如果值是0或空(I假設JobCard是創建動作的自變量類型)。另一個想法是重新創建一個新的JobCard對象,該對象不包括設置ID值,並將新對象發送給創建方法。

所以我怎麼能說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; 
} 
+0

我的問題在這裏,你的第一個建議是JobCardId是int,所以它從不爲空,並且控制器從視圖中返回的值(使用隱藏字段時)爲0,它與jobCard一起服務於服務器。你的第二個看起來不錯,而且我實際上已經完成了,而不需要幫助者。謝謝! – ProfK 2010-07-14 07:11:43

+0

完全同意第一個選項 - int永遠不會爲null,但是在您的控制器中,您可以檢查它是否爲0,然後從發佈的值重新創建一個新的JobCard對象。 – Ahmad 2010-07-14 07:47:28

0

可以喲你有你的PK在網址?

ThingController /創建

ThingController /編輯/ 1234

+0

在獲取編輯動作,它是在URL(值1),但是當我點擊保存,在後期編輯操作將它設置爲0的網址,除非我將它隱藏起來。 – ProfK 2010-07-13 08:24:13

+0

在創建保存的文章中,保存你的數據並獲取ID,重定向到編輯頁面,編號爲 – 2010-07-13 08:36:04

+0

@Anthony,我不想在創建之後進行編輯。我正在嘗試從列表中編輯我的索引視圖,並且在調用編輯時我有該ID。 – ProfK 2010-07-13 08:43:58