Передача параметра в функцию Javascript для ajax в mvc

У меня проблема, с которой я не могу справиться. У меня есть приложение ASP.NET MVC. Его цель - перечислить предметы внутри. Эти позиции представляют собой деятельность по проекту с финансовым отчетом о ней. В представлении пользователи предполагают просматривать финансовую информацию о деятельности по проекту и редактировать некоторые значения. Вот вид:

@model IEnumerable<DKMPPIB.Presentation.ViewModelKlasor.VarlikKlasoru.ProjectActivityFinancialReportViewModel>

<table class = "table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Region)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.City)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.ProjectName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.FieldName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.ProjectActivityName)
        </th>           
        <th></th>
    </tr>

    @foreach (var item in Model)
    {
        <tr>     
            <td>
                @Html.DisplayFor(modelItem => item.Region)
            </td>      
            <td>
                @Html.DisplayFor(modelItem => item.City)
            </td> 
            <td>
                @Html.DisplayFor(modelItem => item.ProjectName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.FieldName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ProjectActivityName)
            </td>            
            <td>
                <a onclick = "readTender()" >
                    <img src='@Url.Content("~/Content/Images/glyphicons_free/glyphicons-342-briefcase.png")' />
                </a>                    
            </td>
            <td>
                <a href='@Url.Action("MyAction", "MyController")'>
                    <img src='@Url.Content("~/Content/Images/glyphicons_free/glyphicons-459-money.png")' />
                </a>
            </td>    
            @*Take attention to that line. I embed the ProjectActivityId here.*@                
            <td style = "visibility:hidden" id = "satirProjeFaaliyetId">@Html.DisplayFor(modelItem => item.ProjectActivityId)</td> 

        </tr>        
    }

</table>


<div id = "tender-message" title = "Tender Information" style = "visibility:hidden">
    <p>
        <span class = "ui-icon ui-icon-circle-check" style = "float:left; margin:0 7px 50px 0;"></span>
        Here is your tender detail: 
    </p>
    <p>
        Currently using <b>36% of your budget </b>.
    </p>
</div>


<script type = "text/javascript">


    function readTender(){

    //I will make an ajax call to get tender information. I need ProjectActivityId for this.
        alert("read tender");
        //var projectActivityId = $('#ProjectActivityId').find(":selected").val();
        //console.info(bolgeDropdownId);

        //$.ajax({
        //    type: "POST",
        //    url: '/Erp/GetTenderInformation',
        //    data: "{ProjectActivityId :'" + projectActivityId + "'}",
        //    contentType: "application/json; charset=utf-8",
        //    dataType: "json",
        //    success: successFunc,
        //    error: errorFunc
        //});
    }

</script>

Как упоминалось выше, функция Javascript readTender требует projectActivityId в качестве входных данных для чтения информации о тендере. Я пишу projectActivityId в последний тег td представления. Как передать projectActivityId в readTender ()?

Вот содержимое ProjectActivityFinancialReportViewModel:

 public class ProjectActivityFinancialReportViewModel
    {
        private ProjectActivityLocationViewModel _projectActivityLocationVM;
        private ProjectActivityViewModel _projectActivityVM;

        [Display(Name = "Region")]
        public string Region
        {
            get
            {
                if (this._projeFaaliyetKonumVM == null)
                    return string.Empty;
                else
                    return this._projectActivityLocationVM.RegionName;
            }

        }

        [Display(Name = "City")]
        public string City
        {
            get
            {
                if (this._projectActivityLocationVM == null)
                    return string.Empty;
                else
                    return this._projectActivityLocationVM.CityName;
            }

        }     

        [Display(Name = "Field Name")]
        public string FieldName
        {
            get
            {
                if (this._projectActivityLocationVM == null || this._projectActivityLocationVM.LocationVm != null)
                    return string.Empty;
                else
                    return this._projectActivityLocationVM.LocationVm.Name;
            }

        }       

        [Display(Name = "Project Activity Name")]
        public string ProjectActivityName
        {
            get
            {
                if (this._projectActivityVM == null)
                    return string.Empty;
                else
                    return this._projectActivityVM.ActivityVM.Name;
            }
        }

        [Display(Name = "Project Name")]
        public string ProjectName
        {
            get
            {
                if (this._projectActivityVM == null)
                    return string.Empty;
                else
                    return this._projectActivityVM.ProjectVM.Name;
            }
        }

        public int ProjectActivityId
        {
            get
            {
                if (this._projectActivityVM == null || this._projectActivityVM.Id == null)
                    return int.MinValue;
                else
                {
                    int id = this._projectActivityVM.Id ?? int.MinValue;
                    return id;
                }                    
            }

        }

        public TenderViewModel TenderVM
        {
            get
            {
                if (this._projectActivityVM == null)
                    return null;
                else
                    return this._projectActivityVM.TenderVM;
            }
        }

        public ProjeFaaliyetMaliRaporveProjeFaaliyetViewModel()
        {
            this._projectActivityLocationVM = null;
            this._projectActivityVM = null;           
        }

    }

Есть множество способов. например добавить его как атрибут data-id = "@item.ProjectActivityId" и прочитать в функции

user3559349 14.06.2018 09:31
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
136
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

<td style = "visibility:hidden" id = "satirProjeFaaliyetId">@Html.DisplayFor(modelItem => item.ProjectActivityId)</td>

Проблема здесь в том, что вы пытаетесь найти элемент по идентификатору, которого нет:

$('#ProjectActivityId').find(":selected").val();

Поэтому измените верхнюю строку на следующую:

<td style = "visibility:hidden;" id = "ProjectActivityId">@item.ProjectActivityId</td>

и строка в вашем js-коде для

$('#ProjectActivityId').val();

Код изначально на турецком, и я преобразовал его на английский для понимания. Забываю поменять.

tahasozgen2 14.06.2018 09:46
Ответ принят как подходящий

Вы можете обрабатывать событие щелчка для каждой строки. Я полагаю, что «выбор» осуществляется «щелчком» по строке. Вы можете сделать это следующим образом:

  1. Измените свою функцию javascript:

function readTender(projectActivityId) { ... }

  1. Измените свой tr внутри foreach:

<tr onclick = "javascript:readTender(@item.ProjectActivityId)">; ... <tr>

Другие вопросы по теме