通过JavaScript从视图MVC发布多个参数

我想将在文本框字段中进行的任何更改立即保存到我的数据库,我使用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的机制是通过添加data-id标签将其作为数据标签附加到文本框的标记中:

 @Html.TextBoxFor(m => item.price, new { id = "", @class = "priceTextBox mytext rightJustified", data_id="item.partid" })

然后更改您的脚本以阅读以下内容:

var partsJava = $(this).data('id');

这种方法的优点是,只需扩展JSON结构并将匹配属性添加到PartInputModel类中,就很容易传递其他参数.

上一篇:转换锚标记HTML链接以使用@ Html.ActionLink


下一篇:javascript – 将js变量或inout值传递给razor