2009-11-22 88 views
1

我在頁面上有多個表單,它們通過隱藏輸入將id傳遞給控制器​​。由於我使用強類型視圖,因此我認爲我需要保持每個ID的相同。儘管我認爲這是不好的做法,但它目前可行。我該如何處理?在Django中有表單前綴值是否有相當的?在asp.net中具有相同輸入ID的兩種形式mvc

Avoid duplication of form input element ID in Django

這裏有兩種形式,我使用:

 <form action="/Course/CropImage" method="post"> 
      <input id="CourseId" name="CourseId" type="hidden" value="<%= Model.CourseId %>" /> 
      <input id="X" name="X" type="hidden" value="<%= Model.X %>" /> 
      <input id="Y" name="Y" type="hidden" value="<%= Model.Y %>" /> 
      <input id="W" name="W" type="hidden" value="<%= Model.W %>" /> 
      <input id="H" name="H" type="hidden" value="<%= Model.H %>" /> 
      <input type="submit" value="Crop" /> 
     </form> 

     <form action="/Course/UploadImage" enctype="multipart/form-data" method="post"> 
      <input id="CourseId" name="CourseId" type="hidden" value="<%= Model.CourseId %>" /> 
      <label for="Image">Select Image:</label><input id="Image" type="file" name="Select Image"/> 
      <input type="submit" value="Upload" /> 
     </form> 
+0

你能顯示你的查看頁面的代碼嗎? – 2009-11-22 10:27:24

回答

4

如果你有2個視圖模型(一個用於作物,一個用於上傳),你可以像這樣的前綴他們(你可以使用HTML傭工):

<form action="/Course/CropImage" method="post"> 
     <input id="Crop_CourseId" name="Crop.CourseId" type="hidden" value="<%= Model.CourseId %>" /> 
     <input id="Crop_X" name="Crop.X" type="hidden" value="<%= Model.X %>" /> 
     <input id="Crop_Y" name="Crop.Y" type="hidden" value="<%= Model.Y %>" /> 
     <input id="Crop_W" name="Crop.W" type="hidden" value="<%= Model.W %>" /> 
     <input id="Crop_H" name="Crop.H" type="hidden" value="<%= Model.H %>" /> 
     <input type="submit" value="Crop" /> 
    </form> 

    <form action="/Course/UploadImage" enctype="multipart/form-data" method="post"> 
     <input id="Upload_CourseId" name="Upload.CourseId" type="hidden" value="<%= Model.CourseId %>" /> 
     <label for="Image">Select Image:</label><input id="Upload_Image" type="file" name="Upload.Image"/> 
     <input type="submit" value="Upload" /> 
    </form> 

,然後綁定屬性的前綴給你這樣的控制器動作:

public ActionResult CropImage([Bind(Prefix="Crop")]CropViewModel viewModel) 
{ 
    // do something 
} 


public ActionResult UploadImage([Bind(Prefix="Upload")]UploadViewModel viewModel) 
{ 
    // do something 
} 
+1

對於任何嘗試使用新強類型模板系統執行相同操作的人,只需將一個前綴放在適用於'htmlFieldName'的* For函數的重載中:'Html.EditorFor(m => m.SomeComplexCropProperty,null, 「剪裁」)'。 'templateName'中的'null'設置爲使用默認值,但它也可以被覆蓋。 – patridge 2010-09-14 15:35:06

+0

@patridge好的提示。如果你使用整個模型的編輯器模板,你也可以像這樣指定前綴:'Html.EditorForModel(null,「thePrefix」)'。 – 2015-11-13 09:01:41

0

我一直前綴我的列名和表名。這裏的(使用強類型的意見和LINQ to SQL)我最新的MVC項目的數據庫佈局:

WeblogEntries: 
- WeblogEntryId 
- WeblogEntryHeaderText 
- WeblogEntryBodyText 
- WeblogEntryDate 

WeblogComments: 
- WeblogCommentId 
- WeblogCommentBodyText 
- WeblogCommentDate 

WeblogErrors 
- WeblogErrorId 
- WeblogErrorExceptionMessage 
- WeblogErrorExceptionStackTrace 
- WeblogErrorDate 

這些命名約定工作的偉大與被使用的dbml - 文件生成的實體類。

+3

爲什麼你會添加不必要的字符?也許在MSAccess表中,但.NET是強類型的。當然,添加這種額外的複雜功能是沒有益處的? – 2009-11-22 11:33:06

+0

我這樣做是爲了避免遇到你在問題中描述的問題:)但是也許我誤解了你的問題? – roosteronacid 2009-11-22 18:00:29

1

這不是一個壞習慣。它們是完全不同的形式,所以輸入元素是唯一的。您不會通過添加前綴來使您的服務器代碼或客戶端js /標記更加語義化。

+3

OP在兩個不同的HTML元素上具有相同的ID,這是不實際的。同名很好。相同的ID是違反HTML和一個實際問題,什麼會得到ElemenetById返回? – 2010-06-26 22:27:03

+0

@David:我沒有看到。但是你是對的,同一個ID是不好的。 – 2010-06-28 05:00:10

相關問題