在客户端处理文本输入

Processing textual inputs in the client side

本文关键字:输入 文本 处理 客户端      更新时间:2023-09-26

. 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#中创建了我的加密方法。

这是可能的,但是处理应该在客户端使用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);
}

你不能这么做…
这里没有魔法,因为JS代码运行在客户端,而c#代码位于服务器端。

你不能使用c#来执行客户端验证。这是因为客户端验证在用户浏览器上运行,而用户浏览器只理解之前由服务器上的c#代码生成的JavaScript和Html。

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

一种方法是按照Darin展示的方法来做。另一种是使用这里描述的MVC内置机制。