C# 使用Ajax助手将参数从视图传递到控制器MVC

C# 使用Ajax助手将参数从视图传递到控制器MVC,c#,ajax,asp.net-mvc,C#,Ajax,Asp.net Mvc,我正在尝试使用Ajax助手将参数从视图传递到控制器,但我不知道我缺少了什么,我无法让它工作 代码如下: 在控制器中: [HttpGet] public ActionResult InsertEvent(int? id) { return View(); } 观点: foreach (var item in Model) { <hr /> @Ajax.ActionLink(item.First_Name +" "+ item

我正在尝试使用Ajax助手将参数从视图传递到控制器,但我不知道我缺少了什么,我无法让它工作

代码如下:

在控制器中:

 [HttpGet]
    public ActionResult InsertEvent(int? id)
    {

        return View();
    }
观点:

foreach (var item in Model)
{
    <hr />
    @Ajax.ActionLink(item.First_Name +" "+ item.Last_Name, null, null, new { id = item.Id },
        new AjaxOptions {
        HttpMethod = "GET",
        OnBegin = "FillName('"+ item.First_Name+ "', '"+item.Last_Name+"')"

    }, new { @class = "clickOnCostumer", @href="#"});
}
foreach(模型中的变量项)
{

@ActionLink(item.First\u Name+“”+item.Last\u Name,null,null,new{id=item.id}, 新选择{ HttpMethod=“GET”, OnBegin=“FillName(“+item.First\u Name+”,“+item.Last\u Name+”)” },新的{@class=“ClickOnCustomer”,@href=“#”}); }
有人能帮忙吗?我看了很多教程,它们展示了相同的解决方案。。我错过什么了吗

下面是调试程序的图片 看起来一切正常,但它不会将值返回给控制器:

 [HttpGet]
    public ActionResult InsertEvent(int? id)
    {

        return View();
    }
两件事

避免向循环内的控制器发送多个调用。这是一个主要的性能问题。 使用jqueryget方法。它简单易用。这里有一个例子

@model Models.MyList2
@{
    ViewBag.Title = "Home Page";
    string allIndexes = "";

    if (Model.Any())
    {
        allIndexes = string.Join(",", Model);
    }
}
<script src="~/Scripts/jquery-1.10.2.min.js"></script>   

<script type="text/javascript">
    jQuery(document).ready(function($) {
        $.get("\MyController\MyMethod", { variablename: '@allIndexes' }, function(result) {
            $("#anotherinput").val(result);
        });
    });
</script>
@model Models.MyList2
@{
ViewBag.Title=“主页”;
字符串allIndexes=“”;
if(Model.Any())
{
allIndexes=string.Join(“,”,Model);
}
}
jQuery(文档).ready(函数($){
$.get(“\MyController\MyMethod”,{variablename:'@allIndexes'},函数(结果){
$(“#另一个输入”).val(结果);
});
});
两件事

避免向循环内的控制器发送多个调用。这是一个主要的性能问题。 使用jqueryget方法。它简单易用。这里有一个例子

@model Models.MyList2
@{
    ViewBag.Title = "Home Page";
    string allIndexes = "";

    if (Model.Any())
    {
        allIndexes = string.Join(",", Model);
    }
}
<script src="~/Scripts/jquery-1.10.2.min.js"></script>   

<script type="text/javascript">
    jQuery(document).ready(function($) {
        $.get("\MyController\MyMethod", { variablename: '@allIndexes' }, function(result) {
            $("#anotherinput").val(result);
        });
    });
</script>
@model Models.MyList2
@{
ViewBag.Title=“主页”;
字符串allIndexes=“”;
if(Model.Any())
{
allIndexes=string.Join(“,”,Model);
}
}
jQuery(文档).ready(函数($){
$.get(“\MyController\MyMethod”,{variablename:'@allIndexes'},函数(结果){
$(“#另一个输入”).val(结果);
});
});

< /代码> 尝试设置该URL值,或者考虑是否正确使用了参数。

> P>尝试设置URL值,或者考虑是否正确使用了参数。

@Ajax.ActionLink(linkText: item.First_Name +" "+ item.Last_Name, 
             actionName: "InsertEvent", 
             routeValues: new { id = item.Id }, 
             ajaxOptions: new AjaxOptions
             {
                 HttpMethod = "GET",
                 OnBegin = "FillName('"+ item.First_Name+ "', '"+item.Last_Name+"')"
             }, 
             htmlAttributes: new { @class = "clickOnCostumer", @href="#"})
这可能有助于明确详细说明每个参数对应的部分。此外,您可能需要在ajaxOptions下添加InsertionMode。例如,在我需要的代码中,我必须进行替换,因此我必须添加一个插件,其中updateTargetId是包含html的div:

                 InsertionMode = InsertionMode.Replace,
                 UpdateTargetId = "rightPanelContent"
这可能有助于明确详细说明每个参数对应的部分。此外,您可能需要在ajaxOptions下添加InsertionMode。例如,在我需要的代码中,我必须进行替换,因此我必须添加一个插件,其中updateTargetId是包含html的div:

                 InsertionMode = InsertionMode.Replace,
                 UpdateTargetId = "rightPanelContent"

我认为您需要在@ActionLink参数中正确设置控制器和插入事件函数。它们是,我使用调试器检查它们是否设置在一起,是否正常工作。我认为我在控制器中没有得到id的值@分词定语从句说出你想做什么。您的
FillName()
函数是什么。您的
ClickOnStumer()
函数是什么。为什么要设置
href=“#”
(它不会调用
InsertEvent()
方法。既然您没有指定
UpdateTargetID
ajax选项,那么您希望对这段代码做什么?这些与我的问题无关,@Stephen Muecke.the fillName()是一个在用户单击ActionLink后自动填充表单输入的函数,ClickOnStumer什么都没有。放下它。UpdateTargetId在这种情况下没有帮助。@moji,您显示的代码中没有任何内容是有意义的。您想做什么?我想您需要正确设置控制器和插入事件n在@ActionLink参数中。它们是,我使用调试器检查它们是否设置在一起,并且它们是否工作。我的想法是,我在控制器中没有得到id的值。@Partick steadmanunclar您试图做什么。您的
FillName()
函数是什么。您的
clickonstumer()是什么
函数。为什么要设置
href=“#”
(它不会调用
InsertEvent()
方法。既然你没有指定
UpdateTargetID
ajax选项,你希望用这段代码做什么?这些与我的问题无关,@Stephen Muecke。fillName()是一个在用户单击ActionLink后自动填充表单输入的函数,ClickOnConstumer什么都没有。只需删除它。UpdateTargetId在这种情况下没有帮助。@moji,您显示的代码中没有任何内容是有意义的。您想做什么?向jquery添加if条件以检查@AllIndex是否为空。更改您的控件r接受逗号分隔的列表。如果需要,可以在控制器中使用IENumerable参数。但在这种情况下,您必须在jquery中构造数组。这是可以做到的。但需要更多的编码。向jquery添加If条件以检查@allIndexes是否为空。将控制器更改为接受逗号分隔的列表。如果你可以在你的控制器中有一个IENumerable参数。但是在这种情况下,你必须在jquery中构造你的数组。这是可以做到的。但是它需要更多的编码。