C# 通过jQuery从post请求的部分视图检索数据

C# 通过jQuery从post请求的部分视图检索数据,c#,jquery,asp.net-mvc,partial-views,C#,Jquery,Asp.net Mvc,Partial Views,我有一个根据用户输入动态更新的视图-其工作原理如下: 视图是使用来自控制器的初始数据呈现的,该控制器使用局部视图填充 单击某些内容时,我使用从控制器的ActionResult中检索部分视图,并用jQuery替换现有数据 我需要从主视图的控制器中获取一个字符串,因此我再次调用控制器并检索一个字符串 我想知道是否有一种方法可以通过局部视图而不是单独调用控制器来获取所需的字符串 初始数据: <!-- This needs to change when the partial is repla

我有一个根据用户输入动态更新的视图-其工作原理如下:

  • 视图是使用来自控制器的初始数据呈现的,该控制器使用局部视图填充
  • 单击某些内容时,我使用从控制器的ActionResult中检索部分视图,并用jQuery替换现有数据
  • 我需要从主视图的控制器中获取一个字符串,因此我再次调用控制器并检索一个字符串
我想知道是否有一种方法可以通过局部视图而不是单独调用控制器来获取所需的字符串

初始数据:

<!-- This needs to change when the partial is replaced, but it's heavier html
     and I don't want to include it in the partial to minimize server calls/data -->
<div class="Location">&nbsp;</div>
<div class="myContainingDiv">
    <!-- This content gets updated -->
    @Html.Partial("_MyPartial");
</div>
<div class="something">Model.something</div>
[HttpGet]
public ActionResult _MyPartial(string param1)
{
    MyModel model = new MyModel();
    // This is dynamic and what I need to get in my main view from the partial view
    model.something = "Hi";
    return PartialView(model);
}
public string GetHiString(string param1)
{
    return "Hi";
}
    $.post('/Home/_MyPartial', { 'param1': 'Hi' }, function (result) {
        $('.something').replaceWith(result);

        getOtherThing('Hi');
    });
    $.post('/Home/_GetHiString', { 'param1': 'Hi' }, function (result) {
        $('.Location').replaceWith(result);
    });
[HttpGet]
public ActionResult _MyPartial(string param1)
{
    MyModel model = new MyModel();
    // This is dynamic and what I need to get in my main view from the partial view
    model.something = "Hi";
    model.somethingElse = GetHiString(param1);
    return PartialView(model);
}
控制器方法(返回所需字符串):

<!-- This needs to change when the partial is replaced, but it's heavier html
     and I don't want to include it in the partial to minimize server calls/data -->
<div class="Location">&nbsp;</div>
<div class="myContainingDiv">
    <!-- This content gets updated -->
    @Html.Partial("_MyPartial");
</div>
<div class="something">Model.something</div>
[HttpGet]
public ActionResult _MyPartial(string param1)
{
    MyModel model = new MyModel();
    // This is dynamic and what I need to get in my main view from the partial view
    model.something = "Hi";
    return PartialView(model);
}
public string GetHiString(string param1)
{
    return "Hi";
}
    $.post('/Home/_MyPartial', { 'param1': 'Hi' }, function (result) {
        $('.something').replaceWith(result);

        getOtherThing('Hi');
    });
    $.post('/Home/_GetHiString', { 'param1': 'Hi' }, function (result) {
        $('.Location').replaceWith(result);
    });
[HttpGet]
public ActionResult _MyPartial(string param1)
{
    MyModel model = new MyModel();
    // This is dynamic and what I need to get in my main view from the partial view
    model.something = "Hi";
    model.somethingElse = GetHiString(param1);
    return PartialView(model);
}
JavaScript(更新部分视图):

<!-- This needs to change when the partial is replaced, but it's heavier html
     and I don't want to include it in the partial to minimize server calls/data -->
<div class="Location">&nbsp;</div>
<div class="myContainingDiv">
    <!-- This content gets updated -->
    @Html.Partial("_MyPartial");
</div>
<div class="something">Model.something</div>
[HttpGet]
public ActionResult _MyPartial(string param1)
{
    MyModel model = new MyModel();
    // This is dynamic and what I need to get in my main view from the partial view
    model.something = "Hi";
    return PartialView(model);
}
public string GetHiString(string param1)
{
    return "Hi";
}
    $.post('/Home/_MyPartial', { 'param1': 'Hi' }, function (result) {
        $('.something').replaceWith(result);

        getOtherThing('Hi');
    });
    $.post('/Home/_GetHiString', { 'param1': 'Hi' }, function (result) {
        $('.Location').replaceWith(result);
    });
[HttpGet]
public ActionResult _MyPartial(string param1)
{
    MyModel model = new MyModel();
    // This is dynamic and what I need to get in my main view from the partial view
    model.something = "Hi";
    model.somethingElse = GetHiString(param1);
    return PartialView(model);
}
JavaScript(getOtherThing):

<!-- This needs to change when the partial is replaced, but it's heavier html
     and I don't want to include it in the partial to minimize server calls/data -->
<div class="Location">&nbsp;</div>
<div class="myContainingDiv">
    <!-- This content gets updated -->
    @Html.Partial("_MyPartial");
</div>
<div class="something">Model.something</div>
[HttpGet]
public ActionResult _MyPartial(string param1)
{
    MyModel model = new MyModel();
    // This is dynamic and what I need to get in my main view from the partial view
    model.something = "Hi";
    return PartialView(model);
}
public string GetHiString(string param1)
{
    return "Hi";
}
    $.post('/Home/_MyPartial', { 'param1': 'Hi' }, function (result) {
        $('.something').replaceWith(result);

        getOtherThing('Hi');
    });
    $.post('/Home/_GetHiString', { 'param1': 'Hi' }, function (result) {
        $('.Location').replaceWith(result);
    });
[HttpGet]
public ActionResult _MyPartial(string param1)
{
    MyModel model = new MyModel();
    // This is dynamic and what I need to get in my main view from the partial view
    model.something = "Hi";
    model.somethingElse = GetHiString(param1);
    return PartialView(model);
}
好的,我想就这些了

基本上,每次通话我只想打一次控制器。在局部视图中包含div不是一个理想的选项

我从主视图第二次点击控制器,以获取数据,这些数据可以很容易地从第一个方法中的对象创建,并发送到局部视图

因此,除了在我的部分视图中包含
之外,还有没有一种方法可以将我需要的额外信息发送到部分视图,并从我的主视图(通过JavaScript)动态检索它。或者,当我从JavaScript调用
\u MyPartial
时,是否有方法返回其他数据


这真的是我想做的最后一次简化,我真的非常感谢你的帮助

您可以修改您的局部视图
\u MyPartial
及其模型,以包含隐藏在其中的内容,您可以使用jQuery提取这些内容:

局部视图

<div class="something">Model.something
    <input class="somethingElse" type="hidden" value="@(Model.somethingElse)" />
</div>
$.post('/Home/_MyPartial', { 'param1': 'Hi' }, function (result) {
    $('.something').replaceWith(result);

    $('.Location').html($('.somethingElse').val());

});
JavaScript(更新部分视图)


你太棒了,我真的很感激,这正是我想要的。你能补充一些详细的信息吗?你带了什么东西吗?