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

bob*_*wah 3 asp.net asp.net-mvc

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

避免 Django 中表单输入元素 ID 重复

这是我正在使用的两种形式:

        <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>
Run Code Online (Sandbox Code Playgroud)

rre*_*ejc 5

如果您有 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>
Run Code Online (Sandbox Code Playgroud)

然后将带有前缀的属性绑定到控制器操作,如下所示:

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


public ActionResult UploadImage([Bind(Prefix="Upload")]UploadViewModel viewModel)
{
  // do something
}
Run Code Online (Sandbox Code Playgroud)

  • 对于任何尝试使用新的强类型模板系统执行相同操作的人,只需在 `htmlFieldName` 的 *For 函数的适当重载中添加一个前缀:`Html.EditorFor(m =&gt; m.SomeComplexCropProperty, null, "作物”)`。“templateName”中的“null”将其设置为使用默认值,但也可以覆盖它。 (2认同)