У меня проблема, с которой я не могу справиться. У меня есть приложение 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;
}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


<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();
Код изначально на турецком, и я преобразовал его на английский для понимания. Забываю поменять.
Вы можете обрабатывать событие щелчка для каждой строки. Я полагаю, что «выбор» осуществляется «щелчком» по строке. Вы можете сделать это следующим образом:
function readTender(projectActivityId) {
...
}
<tr onclick = "javascript:readTender(@item.ProjectActivityId)">;
...
<tr>
Есть множество способов. например добавить его как атрибут
data-id = "@item.ProjectActivityId"и прочитать в функции