asp.net mvc中具有相同输入id的两个表单

时间:2009-11-22 09:50:53

标签: asp.net asp.net-mvc

我在页面上有多个表单,它通过隐藏的输入将id传递给控制器​​。由于我正在使用强类型视图,我认为我需要保持每个这些ID相同。它目前有效但我认为这是不好的做法。我该怎么处理?在Django中有表格前缀值是否有等价的?

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>

3 个答案:

答案 0 :(得分: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 :(得分:1)

这不是一个坏习惯。它们是完全不同的形式,因此使输入元素独特。您不会通过添加前缀来使您的服务器代码或客户端js / markup更加语义化。

答案 2 :(得分:0)

我总是在列名前加上表名。这是我最新的MVC项目的数据库布局(使用强类型视图和LINQ to SQL):

WeblogEntries:
- WeblogEntryId
- WeblogEntryHeaderText
- WeblogEntryBodyText
- WeblogEntryDate

WeblogComments:
- WeblogCommentId
- WeblogCommentBodyText
- WeblogCommentDate

WeblogErrors
- WeblogErrorId
- WeblogErrorExceptionMessage
- WeblogErrorExceptionStackTrace
- WeblogErrorDate

这些命名约定适用于使用dbml-files生成的实体类。