处理客户端的文本输入

时间:2014-07-26 18:07:15

标签: c# javascript asp.net asp.net-mvc razor

使用ASP.NET MVC 5和Razor视图引擎,有没有办法在将数据发布到服务器,处理它们然后再发送处理过的数据之前获取输入字段的值?

例如:

@using (@Html.BeginForm("ViewPage", "Home", FormMethod.Post)) {
     @Html.TextBox("Field1")
     @Html.Hidden("Field2");
     <input type="submit" id="HiddenButton" value="Submit" style="display:none" />
     <input type="button" id="VisibleButton" value="Submit" />    
}

现在:

<script type="text/javascript">
     document.ready(function() {
        $("#VisibleButton").click(function() {
             var Temp = $("#Field1").val()
             @{
                 // C# Area
                 Processing the Temp, by for example calling an extension method and
                 assigning the new value to the Hidden Field
              }
              $("#HiddenButton").trigger("click")
        })
     })
</script>

我想这样做,因为我想在将文本发送到服务器之前对其进行加密,并且我已经在C#中创建了加密方法。

3 个答案:

答案 0 :(得分:1)

这是可能的,但处理应该在客户端上使用javascript:

进行
$("#VisibleButton").click(function() {
    var Temp = $("#Field1").val();

    // process Temp here using javascript
    Temp = 'some new value';

    // set the processed value back to the input field
    $("#Field1").val(Temp);

    $("form").submit();
});

如果由于某些原因希望在服务器上进行处理,可以将其作为AJAX请求发送到控制器操作:

$("#VisibleButton").click(function() {
    var temp = $("#Field1").val();

    $.ajax({
        url: '@Url.Action("SomeAction")',
        data: { value: temp },
        success: function(result) {
            $("#Field1").val(result);
            $("form").submit();
        }
    });
});

你的控制器动作:

public ActionResult SomeAction(string value)
{
    // do your processing here 
    value = "some new value";

    return Json(value);
}

答案 1 :(得分:0)

你真的不能这样做。
这里没有任何魔力,因为JS代码在客户端运行,而C#代码位于服务器中。

您始终可以使用https进行加密会话。

答案 2 :(得分:0)

您无法使用C#执行客户端验证。这是因为客户端验证在用户浏览器上运行,用户浏览器只能理解服务器上C#代码之前生成的JavaScript和Html。

就像Darin所说,如果你想在C#中执行验证,你必须在服务器端进行。为此,您必须执行ajax调用并在JavaScript中解释结果。

一种方法就是按照达林所示的方式做到这一点。另一种是使用描述here的MVC内置机制。