Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model ASP.NET MVC4从url中提取参数并以隐藏形式发送值_Model_Asp.net Mvc 4_Hidden Field - Fatal编程技术网

Model ASP.NET MVC4从url中提取参数并以隐藏形式发送值

Model ASP.NET MVC4从url中提取参数并以隐藏形式发送值,model,asp.net-mvc-4,hidden-field,Model,Asp.net Mvc 4,Hidden Field,我有一个参数,我正在传递一个url。当用户单击url时,他们会被带到允许他们输入附加信息的站点。(密码重置)我需要将我传递的令牌作为url的一部分,并将其放入我提交给另一个控制器的模型中,该控制器验证令牌和密码,并在验证后重置密码。我不知道如何在模型中获取传递的参数 我的控制器: [AllowAnonymous] public ActionResult TokenPasswordReset(string token) { return View(); } return View(new

我有一个参数,我正在传递一个url。当用户单击url时,他们会被带到允许他们输入附加信息的站点。(密码重置)我需要将我传递的令牌作为url的一部分,并将其放入我提交给另一个控制器的模型中,该控制器验证令牌和密码,并在验证后重置密码。我不知道如何在模型中获取传递的参数

我的控制器:

[AllowAnonymous]
public ActionResult TokenPasswordReset(string token)
{
   return View();
}
return View(new TokenModel() { Token = token });
我生成的url是

http://localhost:53272/Account/TokenPasswordReset?wzBXjkT1Y8qmWIECwSIFYQ2
在我看来,我尝试使用设置隐藏模型值

<fieldset>
        <legend>Reset Password Form</legend>
        <ol>
            <li>
                @Html.LabelFor(m => m.NewPassword)
                @Html.PasswordFor(m => m.NewPassword)
            </li>
            <li>
                @Html.LabelFor(m => m.ConfirmPassword)
                @Html.PasswordFor(m => m.ConfirmPassword)
            </li>
        </ol>
        @Html.HiddenFor(model.UserToken = Request.Params["token"])
        <input type="submit" value="TokenPasswordReset" />
    </fieldset>

重置密码表单
  • @LabelFor(m=>m.NewPassword) @Html.PasswordFor(m=>m.NewPassword)
  • @LabelFor(m=>m.ConfirmPassword) @Html.PasswordFor(m=>m.ConfirmPassword)
  • @Html.HiddenFor(model.UserToken=Request.Params[“token”])
    密码和确认密码正常。我不知道如何从url中提取令牌并将其放入model.UserToken。当我这样做的时候,我会得到一个错误

    当前上下文中不存在名称“model”


    编辑:当我按照下面的建议更改为模型时,我得到一个新的错误。由于某些原因,它不会在隐藏中拾取模型。

    详细信息:在ViewData中添加您的令牌,以便您可以在视图中访问它

    解决方案:

    在控制器中

    [AllowAnonymous]
    public ActionResult TokenPasswordReset(string token)
    {
       ViewData["Token"] = token;
    
       return View();
    }
    
    在你看来

    @Html.Hidden("Token", ViewData["Token"])
    
    更新以完成问题

    在你的贴子中使用方法

    [HttpPost]
    public ActionResult TokenPasswordReset(YourModel yourModel, string Token)
    {
       yourModel.Token = Token;
       rest of your code....
    }
    

    详细信息:在ViewData中添加您的令牌,以便您可以在视图中访问它

    解决方案:

    在控制器中

    [AllowAnonymous]
    public ActionResult TokenPasswordReset(string token)
    {
       ViewData["Token"] = token;
    
       return View();
    }
    
    在你看来

    @Html.Hidden("Token", ViewData["Token"])
    
    更新以完成问题

    在你的贴子中使用方法

    [HttpPost]
    public ActionResult TokenPasswordReset(YourModel yourModel, string Token)
    {
       yourModel.Token = Token;
       rest of your code....
    }
    

    它是
    型号
    ,而不是
    型号

    然而,即使这样,它仍然不起作用。请注意,您的url没有令牌查询字符串?这只是胡言乱语,而不是乱语

    此外,如果要将其作为模型项传递,则必须为其创建模型:

    public class TokenModel {
        public string Token {get;set;}
    }
    
    然后在控制器中:

    [AllowAnonymous]
    public ActionResult TokenPasswordReset(string token)
    {
       return View();
    }
    
    return View(new TokenModel() { Token = token });
    

    它是
    型号
    ,而不是
    型号

    然而,即使这样,它仍然不起作用。请注意,您的url没有令牌查询字符串?这只是胡言乱语,而不是乱语

    此外,如果要将其作为模型项传递,则必须为其创建模型:

    public class TokenModel {
        public string Token {get;set;}
    }
    
    然后在控制器中:

    [AllowAnonymous]
    public ActionResult TokenPasswordReset(string token)
    {
       return View();
    }
    
    return View(new TokenModel() { Token = token });
    

    感谢@Mystere Man和@MVCKarl。我能够从他们的答案中提取成分并解决我的问题。MVCKarls解决方案似乎可行,我只是不想使用ViewData。我生成的URL如下所示

    http://localhost:53272/Account/TokenPasswordReset?Token=LW6lnVrdUXemBMYqluAbMA2
    
    在我看来,我把隐藏字段改成了这个

    @Html.Hidden("UserToken", Request.Params["token"])
    
    这使我能够在只传递模型的情况下将其提交给控制器,并且我只需要验证模型


    再次感谢…

    感谢@Mystere Man和@MVCKarl。我能够从他们的答案中提取成分并解决我的问题。MVCKarls解决方案似乎可行,我只是不想使用ViewData。我生成的URL如下所示

    http://localhost:53272/Account/TokenPasswordReset?Token=LW6lnVrdUXemBMYqluAbMA2
    
    在我看来,我把隐藏字段改成了这个

    @Html.Hidden("UserToken", Request.Params["token"])
    
    这使我能够在只传递模型的情况下将其提交给控制器,并且我只需要验证模型


    再次感谢…

    从技术上讲,这解决了他面临的问题,但并不能真正解决他的全部问题。使用ViewData将数据传递给视图,然后再传递给其他控制器可以吗?我读过几篇帖子说不要使用它,所以我通常只在不太重要的消息中使用它。虽然从技术上讲,这解决了他的问题,但并不能真正解决他的全部问题。可以使用ViewData将数据传递到视图,然后传递到其他控制器上吗?我读了几篇帖子说不要使用它,所以我通常只在不太重要的消息中使用它。谢谢你的回复。我的模型已经安装好了。然而,当我做模型时,它说“无法从用法推断类型参数。尝试显式推断。@Xaxum-是否在视图顶部添加了
    @model
    声明?是。它可以很好地获取密码。如果我把令牌放在同一个labelfor和字段中,这样用户就可以在其中输入它们了。这只是隐藏的问题。我现在测试的是隐藏的,看起来至少不会抛出相同的编译错误。将在我完成后更新,但可能已更新。@Xaxum-您是否仍在使用此命令:
    @Html.HiddenFor(model.UserToken=Request.Params[“token”])
    ?那不行。您只需说
    @Html.HiddenFor(x=>x.UserToken)
    我正在使用@Html.Hidden(“UserToken”,Request.Params[“token”]),它至少会编译并传递到下一个操作。我正在写下一个动作,看看模型是否完整。如果这不起作用,我会试试你上面提到的。谢谢你的回复。我的模型已经安装好了。然而,当我做模型时,它说“无法从用法推断类型参数。尝试显式推断。@Xaxum-是否在视图顶部添加了
    @model
    声明?是。它可以很好地获取密码。如果我把令牌放在同一个labelfor和字段中,这样用户就可以在其中输入它们了。这只是隐藏的问题。我现在测试的是隐藏的,看起来至少不会抛出相同的编译错误。将在我完成后更新,但可能已更新。@Xaxum-您是否仍在使用此命令:
    @Html.HiddenFor(model.UserToken=Request.Params[“token”])
    ?那不行。您只需说
    @Html.HiddenFor(x=>x.UserToken)
    我正在使用@Html.Hidden(“UserToken”,Request.Params[“token”]),它至少会编译并传递到下一个操作。我正在写信