【问题标题】:Inside Foreachloop button click Value not pass to controller在 Foreachloop 按钮内单击值不传递给控制器
【发布时间】:2021-01-24 04:55:44
【问题描述】:

我正在尝试将 ID 值传递给按钮单击 Ajax Post 请求上的控制器。但它无法工作。该按钮位于 Foreach 循环中。这里我试图传递 ID 值,但稍后我想传递 model 值。如果可能的话,请给我一个解决方案。

控制器方法:

[HttpPost]
        public IActionResult Job_details(int id)
        {
            int ids = 0;
            return Json(new { result = "Redirect"});
        }

查看代码:

@model IEnumerable<OnlineRecruitmentMst>
@{
    var options = Model.OrderBy(i => i.VacancyID).ToList();
}
 @for (int i = 0; i < options.Count(); i++)
        {
            <div id="loopOption" class="row justify-content-center">
                <div class="col-xl-10">
                    <!-- single-job-content -->
                    <div class="single-job-items mb-30">
                        <div class="job-items">
                            <div class="company-img">
                                <a href="job_details.cshtml"><img src="assets/img/icon/job-list1.png" alt=""></a>
                            </div>
                            <div class="job-tittle">
                                <a><h4 id="VacPost">@options[i].Post</h4></a>
                                <ul>
                                    <li id="VacDept"><i class="fas fa-map-marker-alt"></i>@options[i].Department</li>
                                    <li id="VacNumber">Numer Of Vacancy: @options[i].NumberOfVacancy</li>
                                </ul>
                            </div>
                        </div>
                        <div class="items-link f-right">
                            <button id="btnPost" type="submit" class="btn head-btn1" data-id="@options[i].VacancyID" value="@options[i].VacancyID">View Details</button>
                            <span id="VacEndDate" class="alert-danger">End Date : @options[i].EndDate</span>
                        </div>
                    </div>
                </div>
            </div>
        }

脚本代码:

<script type="text/javascript">
     $(function () {
         $(document).on("click", "#btnPost", function (e) {
             debugger;
             e.preventDefault();
             var Vacid = $(this).val();
                          
            $.ajax({
                type: "POST",
                url: "/home/job_details/",
                data: JSON.stringify(Vacid),
                contentType: 'application/json;charset=utf-8',
                dataType: "json",
                cache: false,
                success: function (response) {
                    alert("AJAX request successfully completed");
                    if (response.result == 'Redirect') {
                        window.location = '@Url.Action("JobVacancy", "Home")';
                    }
                },
                error: function () {
                    alert("An error occurred.");
                }
            });
        });
    });
</script> 

【问题讨论】:

  • 在您的循环中,您正在生成具有相同 ID 的多个项目 btnPost ID 必须是唯一的。使用类

标签: jquery ajax asp.net-core asp.net-mvc-3 model-view-controller


【解决方案1】:

我想传递模型值。如果可能请给我一个解决方案 两者兼得。

id的传递方法可以参考:

查看:

@section Scripts
{
    <script type="text/javascript">
     $(function () {
         $(document).on("click", "#btnPost", function (e) {
             debugger;
             e.preventDefault();
             var Vacid = $(this).val();

             $.ajax({
                 type: "POST",
                 url: "/home/job_details/",
                 data: { id: Vacid },  //change here
                //contentType: 'application/json;charset=utf-8',  //remove this
                dataType: "json",
                cache: false,
                success: function (response) {
                    alert("AJAX request successfully completed");
                    if (response.result == 'Redirect') {
                        window.location = '@Url.Action("JobVacancy", "Home")';
                    }
                },
                error: function () {
                    alert("An error occurred.");
                }
            });
        });
    });
    </script>
}

关于如何传递模型,这里有一个工作演示,你需要用动态索引修改你的元素id:

型号:

public class OnlineRecruitmentMst
{
    public int VacancyID { get; set; }
    public string Post { get; set; }
    public string Department { get; set; }
    public int NumberOfVacancy { get; set; }
    public string EndDate { get; set; }
}

查看:

@model IEnumerable<OnlineRecruitmentMst>
@{
    var options = Model.OrderBy(i => i.VacancyID).ToList();
}
@for (int i = 0; i < options.Count(); i++)
{
    <div id="loopOption" class="row justify-content-center">
        <div class="col-xl-10">
            <!-- single-job-content -->
            <div class="single-job-items mb-30">
                <div class="job-items">
                    <div class="company-img">
                        <a href="job_details.cshtml"><img src="assets/img/icon/job-list1.png" alt=""></a>
                    </div>
                    <div class="job-tittle">
                        <a><h4 id="VacPost_@i">@options[i].Post</h4></a>    @*change id here*@
                        <ul>
                            @*change id here*@
                            <li id="VacDept_@i"><i class="fas fa-map-marker-alt"></i>@options[i].Department</li>
                            <li id="VacNumber_@i">Numer Of Vacancy: @options[i].NumberOfVacancy</li>
                        </ul>
                    </div>
                </div>
                <div class="items-link f-right">
                    @*add onclick function here*@
                    <button onclick="Click('@options[i].VacancyID','@i')" id="btnPost" type="submit" class="btn head-btn1" data-id="@options[i].VacancyID" value="@options[i].VacancyID">View Details</button>
                    @*change id here*@
                    <span id="VacEndDate_@i" class="alert-danger">End Date : @options[i].EndDate</span>
                </div>
            </div>
        </div>
    </div>
}
@section Scripts
{
    <script type="text/javascript">
        function Click(vacid,index) {
            var VacNumber = $("#VacNumber_" + index).text();
            var data = VacNumber.split(":");
            var Vacancy = data[data.length - 1];
            var VacEndDate = $("#VacEndDate_" + index).text();
            var data2 = VacEndDate.split(":");
            var EndDate = data2[data2.length - 1];
            //pass the model
            var model = {
                VacancyID: vacid,
                Post: $("#VacPost_" + index).text(),
                Department: $("#VacDept_" + index).text(),
                NumberOfVacancy: Vacancy,
                EndDate: EndDate,
            };
            $.ajax({
                type: "POST",
                url: "/home/job_details/",
                data: JSON.stringify(model),  //change here
                contentType: 'application/json;charset=utf-8',
                dataType: "json",
                cache: false,
                success: function (response) {
                    alert("AJAX request successfully completed");
                    if (response.result == 'Redirect') {
                        window.location = '@Url.Action("JobVacancy", "Home")';
                    }
                },
                error: function () {
                    alert("An error occurred.");
                }
            });
        }
 
    </script>
}

控制器:

[HttpPost]
public IActionResult Job_details([FromBody] OnlineRecruitmentMst OnlineRecruitmentMst)
{
    //...
}

结果:

【讨论】:

  • 如果只是改变了所以他没有重复 id 那么它会工作得很好。 Aka 将 #btnPost 更改为 .btnPost 就可以了
  • @Rena 对于 ID 传递它非常适合我。但是当我尝试在控制器端传递模型时,我收到的模型为 null。
  • 嗨@Rushil,请确保您已经复制了我的整个代码,并且模型应该与我的相同。如果您不知道如何更改代码,您可以提供可以重现您的代码问题。
  • @Rena 我使用了与您提供的相同的代码,但我没有找到解决方案。每次我的模型在控制器端为空时。
  • 确保你的控制器不是ApiController。记得在你的action中添加[FromBody]。记得在你的ajax中添加contentType: 'application/json;charset=utf-8',
猜你喜欢
  • 1970-01-01
  • 2018-01-29
  • 2014-03-26
  • 1970-01-01
  • 2016-10-24
  • 2021-08-16
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多