从视图MVC通过javascript发布多个参数
本文关键字:布多个 参数 javascript 通过 视图 MVC | 更新日期: 2023-09-27 18:21:56
我想立即将文本框字段中所做的任何更改保存到我的数据库中,我有javascript将更改后的值传回控制器,但我不知道如何传递唯一id来保存更改后的数值。
以下是我将价格传递回脚本的视图,如何使用此视图传递零件id?
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.partid, new { id = "partCode"})
</td>
<td>
@Html.DisplayFor(modelIem => item.partdesc)
</td>
<td>
@Html.TextBoxFor(modelItem => item.price, new { id = "priceTextBox", @class = "mytext rightJustified" })
</td>
</tr>
}
</table>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$(function () {
$('#priceTextBox').change(function () {
var changedText = $(this).val();
var partsJava = $("#partCode").val();
//Post the content of your Textbox to your "YourAction" action in "YourController"
$.post('@Url.Action("EnterNewSpecialPrice2", "SpecialPrices")', { "ChangedText": changedText, "PassPartCode": partsJava }, function (data) { });
});
});
</script>
定义一个类来保存与您在脚本中创建的Json对象匹配的两条信息:
public class PartInputModel{
public string ChangedText {get;set;}
public string PassPartCode {get;set;}
}
请注意,以上属性必须与您在此处定义的属性相匹配:
{ ChangedText: changedText, PassPartCode: partsJava }
还要注意,在创建JSON结构时,必须删除ChangedText和PassPartCode定义周围的双引号,因为这不是必需的。
更改控制器操作以接收此对象,并让模型绑定完成工作:
[HttpPost]
public ActionResult EnterNewSpecialPrice2(PartInputModel inputModel) {
// inputModel will have your two pieces of data
}
存储和检索id的更好机制是通过添加数据id标签将其作为数据标签附加到文本框的标记:
@Html.TextBoxFor(m => item.price, new { id = "", @class = "priceTextBox mytext rightJustified", data_id="item.partid" })
然后更改您的脚本以读取以下内容:
var partsJava = $(this).data('id');
这种方法的优点是,只需扩展JSON结构并向PartInputModel
类添加匹配属性,就可以很容易地传递额外的参数。
由于id
属性和选择器(如var partsJava = $("#partCode").val();
)重复,您生成的html无效,将只能获得具有id="partCode"
的第一个元素的值。在任何情况下,它都是未定义的,因为DisplayFor()
不生成元素(仅文本),并且它具有id
属性或value
属性。将循环更改为
@foreach (var item in Model)
{
<tr>
<td>@Html.DisplayFor(m => item.partid)</td>
<td>@Html.DisplayFor(m => item.partdesc)</td>
<td>
@Html.TextBoxFor(m => item.price, new { id = "", @class = "priceTextBox mytext rightJustified", data_id="item.partid" })
</td>
</tr>
}
然后将脚本修改为
$('.priceTextBox').change(function () {
var changedText = $(this).val();
var partsJava = $(this).data('id');
$.post('@Url.Action("EnterNewSpecialPrice2", "SpecialPrices")', { "ChangedText": changedText, "PassPartCode": partsJava }, function (data) { });
});
});
请注意,new { id="" }
会删除id
属性,这样就不会得到无效的html。
当然,这是假设你有一个方法
public ActionResult EnterNewSpecialPrice2(string ChangedText, string PassPartCode)
在SpecialPricesController
中(尽管PassPartCode
可能是int
?