Asp.net mvc 4 MVC4Razor引擎从文本框获取数据,并通过单击按钮发送另一个文本框
我想举例说明我的问题。例如,我有3个输入位置Asp.net mvc 4 MVC4Razor引擎从文本框获取数据,并通过单击按钮发送另一个文本框,asp.net-mvc-4,razor,Asp.net Mvc 4,Razor,我想举例说明我的问题。例如,我有3个输入位置 <input id="txtA" type="text" class="search-text" /> <input id="txtB" type="text" class="search-text" /> <input id="txtC" type="text" class="search-text" /> 我有提交按钮 <input id="hesapla" type="submit" value=
<input id="txtA" type="text" class="search-text" />
<input id="txtB" type="text" class="search-text" />
<input id="txtC" type="text" class="search-text" />
我有提交按钮
<input id="hesapla" type="submit" value="Hesap" name="but" />
还有一个文本区域显示结果
<input id="Text1" type="text" class="search-text" />
让我们来回答我的问题-用户将在这些输入区域输入数字,当用户单击按钮时,将在输入的数字之间进行计算-例如求和-结果将显示在最新的文本区域。我认为这很简单,但我刚刚开始mvc,我无法从我阅读和观看的文档中理解我的意思。谢谢。这应该可以帮你上路了: 假设控制器文件夹中有一个SearchController,视图文件夹中有一个Search.cshtml,url为localhost/Search
public class SearchController
{
///GET
public ActionResult Index(){
return View();
}
///POST
public ActionResult Index(string txtA, string txtB, string txtC)
{
//perform calculation and assign to string result
string result = "Search Results!";
return View (result);
}
}
看法
@模型字符串
@*跳过的输入字段*@
注意:这不会重新填充txtA、txtB、txtC字段。如果要重新填充这些对象,需要创建一个适当的模型
类(而不是使用字符串),并通过控制器索引(字符串txtA、字符串txtB、字符串txtC)
方法将其传递给视图。尝试以下脚本:
<script type="text/javascript" language="javascript">
$(document).ready(function () {
$("#hesapla").click(function () {
var t1 = $("#txtA");
var t2 = $("#txtB");
var t3 = $("#txtC");
var Result = 0;
var aa = parseFloat(t1.val());
var bb = parseFloat(t2.val())
var cc = parseFloat(t3.val())
Result = aa + bb + cc ;
$("#Text1").val(Result);
});
});
</script>
我为您的任务提供了三种选择: 1。使用提交的表单将数据传递到服务器 为此,您需要为输入指定名称,将它们包装起来,并使用
标记提交按钮,创建asp.net mvc操作,以接收您的值并发送回结果
示例:
视图模型
看法
并添加向服务器发送数据的脚本:
<script>
$(function() {
$("#hesapla").click(function (e) {
e.preventDefault();
var callback = function(response) {
$("#Text1").val(response.result);
}
$.post("@Url.Action("Sum")", $("#sumForm").serialize(), callback, 'json');
});
})
</script>
您是想通过JavaScript进行计算,还是想将结果发布回服务器,以便在那里进行计算?抱歉,我忘了指出这一点。我不想使用javascript,我想在服务器端使用。你来自web表单背景吗?是的。在这方面,我认为没有txtA.text,是吗?所以MVC范式在这方面与web表单非常不同。当然,这个例子在web表单中非常简单,将一个按钮事件处理程序附加到设置Text1.Text的submit按钮。MVC没有按钮事件处理程序,而是只有HTTP事件(get、post等)。因此,您的输入按钮将导致Post事件。您可以在控制器中创建一个重载来捕获Post事件,然后创建一个新模型来传递给视图(同一视图或新视图(即SearchResultsView))。然后使用Razor语法在视图中进行内联数据绑定。@Amit是的,谢谢,我写了一条关于javascript的错误语句。刚刚纠正了它。
<input id="hesapla" type="button" value="Hesap" name="but" />
http://jsfiddle.net/E89P6/
public class CalcModelViewModel
{
public CalcModelViewModel() : this(0) { }
public CalcModelViewModel(int countOfInputs)
{
Inputs = Enumerable.Repeat(0m, countOfInputs);
}
public IEnumerable<decimal> Inputs { get; set; }
public decimal Result { get; set; }
}
public ActionResult Sum()
{
return View(new CalcModelViewModel(3));
}
[HttpPost]
public ActionResult Sum(decimal[] numbers)
{
return View(new CalcModelViewModel() { Inputs = numbers, Result = numbers.Sum() });
}
@model Mvc4Application.Controllers.CalcModelViewModel
<form id="sumForm" action="@Url.Action("Sum")" method="POST">
@foreach (var num in Model.Inputs)
{
<input type="text" class="search-text" name="numbers" value="@num" />
}
<input id="hesapla" type="submit" value="Hesap" name="but" />
</form>
<input id="Text1" type="text" class="search-text" value="@Model.Result" />
[HttpPost]
public ActionResult Sum(decimal[] numbers)
{
return Json(new { result = numbers.Sum() });
}
<script>
$(function() {
$("#hesapla").click(function (e) {
e.preventDefault();
var callback = function(response) {
$("#Text1").val(response.result);
}
$.post("@Url.Action("Sum")", $("#sumForm").serialize(), callback, 'json');
});
})
</script>
$(function() {
$("#hesapla").click(function (e) {
e.preventDefault();
var sum = 0;
$('input[name=numbers]').each(function() {
sum += parseFloat($(this).val());
});
$("#Text1").val(sum);
});
})