C# MVC中具有强类型视图模型的JQuery Real Person

C# MVC中具有强类型视图模型的JQuery Real Person,c#,jquery,model-view-controller,C#,Jquery,Model View Controller,我正在尝试使用带有强类型视图模型的.NETMVC实现jQueryRealPerson 我有个人视图模型: public class PersonVM { public Guid Id {get; set;} public string FirstName {get; set;} public string LastName {get; set;} // etc... public string RealPersonCode {get; set;} } 根

我正在尝试使用带有强类型视图模型的.NETMVC实现jQueryRealPerson

我有个人视图模型:

public class PersonVM
{
   public Guid Id {get; set;}
   public string FirstName {get; set;}
   public string LastName {get; set;}
   // etc...
   public string RealPersonCode {get; set;}    

}
根据文件:

我应该‘将根据用户输入的文本计算的哈希值与在客户端生成的哈希值进行比较’

现在我可以访问输入的文本的值,并使用文档在服务器上对其进行散列,这不是问题

但我没有使用Request.Form[],就像在示例中一样,我将视图模型传递给我的控制器,因此我的代码看起来有点像这样:

[HttpPost]
public ActionResult PersonDetails(PersonVM viewModel)
{
    if(rpHash(viewModel.RealPersonCode) == viewModel.RealPersonCode.GetHashCode())
    {
       //accepted -- doesn't seem to work
    }
}
我只是不确定客户端哈希来自哪里

我是否应该在视图模型中添加另一个名为realPersonHash的字段,然后在客户端上手动对其进行散列

查看文档:

if (rpHash(Request.Form["realPerson"] + salt) == Request.Form["realPersonHash"]) { 
    // Accepted
不清楚Request.Form[“realPersonHash”]设置在哪里,或者如何设置


如果有任何帮助,我们将不胜感激。

发现答案其实非常直截了当。我需要在视图模型中添加一个名为RealPersonHash的字段

public class PersonVM
{
   public Guid Id {get; set;}
   public string FirstName {get; set;}
   public string LastName {get; set;}
   // etc...
   public string RealPersonCode {get; set;}
   public string RealPersonaHash {get; set;}    

}
然后在初始值设定项中标识它:

<script>
    $('#RealPersonCode').realperson({ hashName: 'RealPersonHash'});
</script>
一旦我有了这个,我就可以在服务器上比较这两个

    public ActionResult PersonDetails(PersonVM viewModel)
    {

        if (rpHash(viewModel.RealPersonCode) == viewModel.RealPersonHash)
        {
             // we have a real person!
        }

这现在起作用了。。。希望它能帮助其他人。

用户964769给出的解决方案对我不起作用。隐藏字段根本没有初始化

我在这里找到了另一个解决方案-

特别是,调用
$('selector').realperson('getHash')
就成功了

那么整个事情应该是下面这样的

HTML:

那么服务器端就像realperson文档所说的那样简单:

if(rpHash(model.realPerson) == model.rpHash)
{
    //happy days, captcha corret
}

+关于一个老问题和答案。多年来一直使用reCaptcha,但当我们将市场扩展到中国时,它就落到了真人身上。中国大陆阻止远程托管的*.google.com URL,因此阻止了reCaptcha。需要一个快速修复,这将使我达到那里,直到我可以推出自己的。
<input id="captcha_input" />
//Basic initialisation

$(function(){

    $('#captcha_input').realperson({ length: 6 });

})


//Send to server via desired method, eg...

function SubmitCaptcha(){

    var formData = new FormData();
    formData.append("realPerson", $('#captcha_input').val());
    formData.append("rpHash", $('#captcha_input').realperson('getHash'));

//Then AJAX it...
}
if(rpHash(model.realPerson) == model.rpHash)
{
    //happy days, captcha corret
}