2009-11-22 86 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

相关问题