首页 > 解决方案 > 不同的隐藏字段在 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 });
}

在 中PictureSaveViewModelGalleryId指父画廊,Id是图片的 ID。因为是NewPicture动作,Id所以设置为0,GalleryId设置为id参数。在视图中,我有一个包含多个输入的表单PictureSaveViewModel

@Html.HiddenFor(model => model.Id)
@Html.HiddenFor(model => model.GalleryId)

这是指定模型的两个隐藏输入。我希望隐藏字段的值为 0,而Id的值为参数的值。但是当我这样调用动作时,两个隐藏字段的值都是GalleryIdIdGalleryIdid/Gallery/NewPicture/8282

<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, ....工作正常。

标签: c#asp.net-mvcrazorhtml-helperhidden-field

解决方案


在您的请求中,您将获得 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 });
    }

推荐阅读