不同的隐藏字段在 Asp.net C# Razor 中获得相同的值

Different Hidden Fields Gets Same Value In Asp.net C# Razor

我有一个看起来像这样的动作:

public ActionResult NewPicture(int id)
{
    var response = service.Get(id);
    if (!response.Succeed)
       return Error(response.MainError.ErrorType);
    return ManagementView("/Gallery/EditPicture.cshtml", new PictureSaveViewModel() { Id = 0, GalleryId = id });
}

PictureSaveViewModel 中,GalleryId 指的是父图库,Id 是图片的 ID。因为它是 NewPicture 操作,所以 Id 设置为 0,GalleryId 设置为 id 参数。 在视图中,我有一个包含 PictureSaveViewModel.

的多个输入的表单
@Html.HiddenFor(model => model.Id)
@Html.HiddenFor(model => model.GalleryId)

这里有两个隐藏输入 IdGalleryId 指定 model.I 期望隐藏字段 Id 的值为 0 和 GalleryId的值为参数的id。但是当我调用这样的操作 /Gallery/NewPicture/82 时,两个隐藏字段的值都是 82

<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="Id" name="Id" type="hidden" value="82">
<input data-val="true" data-val-number="The field GalleryId must be a number." data-val-required="The GalleryId field is required." id="GalleryId" name="GalleryId" type="hidden" value="82">     

我不知道这是怎么回事。我事件尝试 @Html.Hidden("Id" ,@Model.Id),但结果仍然相同。 title, description, .... 等其他输入字段工作正常。

在您的请求中,您获得了 Id 参数。因此,当您传递具有该文件名的模型时,它将自动使用请求 ID 数据。所以请尝试下面的代码,将 id 参数更改为 tid

 public ActionResult NewPicture(int tid)

    {
        var response = service.Get(tid);
        if (!response.Succeed)
           return Error(response.MainError.ErrorType);
        return ManagementView("/Gallery/EditPicture.cshtml", new PictureSaveViewModel() { Id = 0, GalleryId = tid });
    }