使用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#中创建了加密方法。
答案 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内置机制。