Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从视图MVC通过javascript发布多个参数_Javascript_C#_Asp.net Mvc_Razor - Fatal编程技术网

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

从视图MVC通过javascript发布多个参数,javascript,c#,asp.net-mvc,razor,Javascript,C#,Asp.net Mvc,Razor,我想将文本框字段中所做的任何更改立即保存到我的数据库中,我有javascript将更改的值传递回控制器,但是我不知道如何传递唯一id来保存更改的值。 下面是我将价格传递回脚本的观点,我如何将零件id与此一起传递 @foreach(模型中的变量项) { @DisplayFor(modelItem=>item.partid,新的{id=“partCode”}) @DisplayFor(modeleem=>item.partdesc) @Html.TextBoxFor(modelItem=>item

我想将文本框字段中所做的任何更改立即保存到我的数据库中,我有javascript将更改的值传递回控制器,但是我不知道如何传递唯一id来保存更改的值。
下面是我将价格传递回脚本的观点,我如何将零件id与此一起传递

@foreach(模型中的变量项)
{
@DisplayFor(modelItem=>item.partid,新的{id=“partCode”})
@DisplayFor(modeleem=>item.partdesc)
@Html.TextBoxFor(modelItem=>item.price,新的{id=“priceTextBox”,@class=“mytext RightArrized”})
}
$(函数(){
$('#priceTextBox')。更改(函数(){
var changedText=$(this.val();
var partsJava=$(“#partCode”).val();
//将文本框的内容发布到“YourController”中的“YourAction”操作中
$.post('@Url.Action(“EnterNewSpecialPrice2”,“SpecialPrices”),{“ChangedText”:ChangedText,“PassPartCode”:partsJava},函数(数据){});
});
});

定义一个类来保存与脚本中创建的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();
将仅使用
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>
}
注意
new{id=”“}
删除
id
属性,这样就不会得到无效的html

当然,这假设您有一个方法

public ActionResult EnterNewSpecialPrice2(string ChangedText, string PassPartCode)

专用价格控制器中
(尽管
PassPartCode
可能是
int

您好,谢谢@CSL,但我遵循了您的方法,仍然只收到更改文本的值,PassPartCode仍然返回null。我是否正确引用了partid?@cg91请参阅我在上面的编辑,在文本框标记中添加一个数据标记,然后稍微更改脚本。)阅读此文。@StephenMuecke嘿-我比你投了更高的票-你的答案很好。我会把OP指向你答案的方向,而不是他已经将结构更改为使用类的事实-因此他们可能会对切换回你的方法感到困惑。谢谢Stephen,我将你的两个答案组合在一起请告诉我,我给了CSL最重要的答案,因为他先回答了,我对你的回答投了赞成票
public ActionResult EnterNewSpecialPrice2(string ChangedText, string PassPartCode)