JQuery Real Person在MVC中具有强类型视图模型

时间:2014-10-20 09:44:30

标签: c# jquery model-view-controller

我正在尝试使用带有强类型视图模型的.Net MVC来实现JQuery Real Person。

我有一个人查看模型:

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

}

根据文件:http://keith-wood.name/realPerson.html

我应该'将用户输入的文本计算的哈希值与客户端上生成的哈希值进行比较'

现在我可以使用文档访问输入的文本值并在服务器上哈希,这不是问题。

但我没有像示例中那样使用Request.Form [],我将View Model传递给我的控制器,所以我的代码看起来有点像这样:

[HttpPost]
public ActionResult PersonDetails(PersonVM viewModel)
{
    if(rpHash(viewModel.RealPersonCode) == viewModel.RealPersonCode.GetHashCode())
    {
       //accepted -- doesn't seem to work
    }
}

我只是不确定客户端哈希的来源。

我是否应该在我的View Model中添加另一个名为realPersonH​​ash的字段,然后在客户端上手动哈希?

查看文档:

if (rpHash(Request.Form["realPerson"] + salt) == Request.Form["realPersonHash"]) { 
    // Accepted

不清楚Request.Form [“realPersonH​​ash”]的设置位置,或者如何设置它。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

发现答案实际上很直接。我需要在我的View Model中添加一个名为RealPersonH​​ash的字段,

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>

在我看来,我需要一个隐藏的领域:

@Html.HiddenFor(model => model.RealPersonHash);

一旦我有了这个,我可以比较服务器上的两个。

    public ActionResult PersonDetails(PersonVM viewModel)
    {

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

这现在有效......希望它可以帮助别人。

答案 1 :(得分:0)

user964769提供的解决方案不适用于我。隐藏字段根本没有初始化。

我在这里找到了另一种解决方案-https://stackoverflow.com/a/35860708/5801881

特别是,调用$('selector').realperson('getHash')可以达到目的。

所以整个事情应该像下面这样。

HTML:

<input id="captcha_input" />

Javascript / jQuery:

//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...
}

然后,服务器端就像Realperson文档所说的那样简单:

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