Javascript MVC4模型更改不会反映在后续页面调用中

Javascript MVC4模型更改不会反映在后续页面调用中,javascript,jquery,ajax,asp.net-mvc-4,Javascript,Jquery,Ajax,Asp.net Mvc 4,我已经研究了几个小时试图找到一个解决方案,没有其他的SO条目或其他来源的条目似乎已经解决了这个具体问题。所展示的是实际代码的一个非常小的版本,但它完全演示了问题,如果这个问题能够得到纠正,那么更大的代码也将得到修复。问题是: MVC4 主控制器上的索引页,一个HttpPost操作和一个HttpGet操作 名为PassModel的简单模型一个名为A(string)的属性 在@foreach循环中的单个字段上显示一个Html DisplayFor 可以单击的HTML项,它调用jQuery函数 加载时

我已经研究了几个小时试图找到一个解决方案,没有其他的SO条目或其他来源的条目似乎已经解决了这个具体问题。所展示的是实际代码的一个非常小的版本,但它完全演示了问题,如果这个问题能够得到纠正,那么更大的代码也将得到修复。问题是:

MVC4

主控制器上的索引页,一个HttpPost操作和一个HttpGet操作

名为PassModel的简单模型一个名为A(string)的属性

在@foreach循环中的单个字段上显示一个Html DisplayFor

可以单击的HTML项,它调用jQuery函数

加载时,页面显示字母“A”和输入元素。“A”将加载到视图模型中的单个字段中

单击输入元素时,将调用jQuery函数

它提交一个ajax POST,该POST使用适当的数据(“C”)正确调用索引操作,并将其加载回视图模型实例中

Debug walk显示,使用jQuery传递的值“C”完全更改了模型,并且更改后的模型在视图中有值“C”

当返回视图(模型)出现时,旧值“A”仍然显示,新插入模型的值被忽略(“C”)

在提供的结构中,是否可以在第二次进入视图时显示更改后的模型内容?我在网上尝试了许多与我所经历的有点相似的建议,将post改为get,改为$.get和$.post(带有适当的注释更改),Model.State.Clear(),但都没有效果

感谢您的建议。。。所涉及的全部代码如下所示

代码:

公共类HomeController:控制器{
[HttpPost]
公共操作结果索引(字符串id){
IList b=新列表();
PassModel x=新的PassModel();
x、 A=id;
b、 加(x);
返回视图(“索引”,b);
}    
公共行动结果索引(){
var x=新的PassModel();
x、 A=“A”;
IList a=新列表();
a、 加(x);
返回视图(“索引”,a);
}
}
函数填充(对象){
$.ajax({
url:“/Home/Index”,
键入:“POST”,
cache:false,
数据:{id:“C”},
})
}
@模型IList
@foreach(模型中的var项目){
@DisplayFor(modeleItem=>item.A)
}
公共类传递模型{
公共字符串A{get;set;}
}

您正在进行ajax调用。ajax的全部目的是保持在同一页面上。您发布到
Index()
方法,该方法返回一个视图(它应该是部分视图),但您从未对该视图执行任何操作,即更新DOM。在视图中添加
元素,然后在ajax中添加
success:function(data){$('#content').html(data);}
以了解其工作原理(尽管实际上您会返回表的部分视图,并且只更新表),谢谢您的回复。这似乎是我对MVC/helpers如何解决我的需求的误解。目标是提供一个屏幕,其中包含日期的下拉列表,这些日期是数据库中数据集的关键。屏幕首先显示一系列日期中的前1个日期,从EF提取的数据填充模型,并发送到视图。效果很好。当下拉列表中的日期发生变化时,我会用返回的数据刷新模型,并让助手将其映射到页面中。我想这样做是行不通的,所以我需要重新考虑如何做到这一点。我改变了策略,将我的选择列表从我正在刷新的页面上移开。现在,foreach使用每个日期的ActionLink填充日期列表,我现在可以将所需的值传递给ActionMethod。从那以后,现在可以很容易地将不同的值提交到这个处理链中,并且我能够实现我所需要的,而无需将javascript onchange事件绑定到DropDownList上。再次感谢。你在打ajax电话。ajax的全部目的是保持在同一页面上。您发布到
Index()
方法,该方法返回一个视图(它应该是部分视图),但您从未对该视图执行任何操作,即更新DOM。在视图中添加
元素,然后在ajax中添加
success:function(data){$('#content').html(data);}
以了解其工作原理(尽管实际上您会返回表的部分视图,并且只更新表),谢谢您的回复。这似乎是我对MVC/helpers如何解决我的需求的误解。目标是提供一个屏幕,其中包含日期的下拉列表,这些日期是数据库中数据集的关键。屏幕首先显示一系列日期中的前1个日期,从EF提取的数据填充模型,并发送到视图。效果很好。当下拉列表中的日期发生变化时,我会用返回的数据刷新模型,并让助手将其映射到页面中。我想这样做是行不通的,所以我需要重新考虑如何做到这一点。我改变了策略,将我的选择列表从我正在刷新的页面上移开。现在,foreach使用每个日期的ActionLink填充日期列表,我现在可以将所需的值传递给ActionMethod。从那以后,现在可以很容易地将不同的值提交到这个处理链中,并且我能够实现我所需要的,而无需将javascript onchange事件绑定到DropDownList上。再次感谢。
public class HomeController : Controller {
    [HttpPost]
    public ActionResult Index(string id) {
        IList<PassModel> b = new List<PassModel>();
        PassModel x = new PassModel();
        x.A = id;
        b.Add(x);
        return View("Index", b);
    }    
    public ActionResult Index() {
        var x = new PassModel();
        x.A = "A";
        IList<PassModel> a = new List<PassModel>();
        a.Add(x);
        return View("Index",a);
    }
}

function fill(object) {
    $.ajax({
        url: '/Home/Index',
        type: 'POST',
        cache: false,
        data: { id: "C" },
    })

}

@model IList<PassModel>
<table>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.A)
        </td>
        <td>
            <input value="Input" onclick="fill(this)"/>

        </td>
    </tr>
}

</table>

<script src="~/Scripts/jquery-1.10.2.js"></script>
<script src="~/Scripts/JavaScript1.js"></script>


public class PassModel {
    public string A { get; set; }
}