Я ищу реализацию меню вкладок, которое использует тот же вид и частичный вид.Но затем при нажатии на любую из вкладок она обновляется на основе сравнения в модели.Контроллер определяет, является ли он Оригиналом или Поправкой.Пока у меня есть две вкладки, показывающие с помощью:
var fullAccountCodeOriginal = Model.OriginalWriter.ID;
var fullAccountCodeAmendment = Model.ActiveAmendmentWriter.ID;
<div class="page-tabs">
<ul class="nav nav-tabs">
<li class='@((actionName.ToLower() == "viewwriteramendments") &&
controllerName.ToLower() == "songsmanagement" ? "active" : "")'>
<a href='@Url.Action("ViewWriterAmendments", "SongsManagement", new
{
accountcode = fullAccountCodeOriginal
})' data-container="body" data-toggle="tooltip" title="Song Management">Original Track Details</a>
</li>
<li class='@((actionName.ToLower() == "viewwriteramendments") &&
controllerName.ToLower() == "songsmanagement" ? "active" : "")'>
<a href='@Url.Action("ViewWriterAmendments", "SongsManagement", new
{
accountcode = fullAccountCodeAmendment
})' data-container="body" data-toggle="tooltip" title="Song Management">Updated Track Details</a>
</li>
}
</ul>
В модели есть:
public ViewWriterAmendmentsComparisonModel()
{
this.OriginalWriter = default(WriterAmendmentsComparisionModel);
this.ActiveAmendmentWriter = default(WriterAmendmentsComparisionModel);
}
public WriterAmendmentsComparisionModel OriginalWriter { get; set; }
public WriterAmendmentsComparisionModel ActiveAmendmentWriter { get; set; }
Контроллер
var writerAndActiveAmendment = new ViewWriterAmendmentsComparisonModel
{
OriginalWriter = new WriterAmendmentsComparisionModel
{
ID = domainWriterAndAmendmentModel.Original.ID,
RowVersion = domainWriterAndAmendmentModel.Original.RowVersion,
IsDeleted = domainWriterAndAmendmentModel.Original.IsDeleted,
IsLocked = domainWriterAndAmendmentModel.Original.IsLocked,
IsNew = domainWriterAndAmendmentModel.Original.IsNew,
Version = domainWriterAndAmendmentModel.Original.Version,
FirstName = domainWriterAndAmendmentModel.Original.FirstName,
MiddleName = domainWriterAndAmendmentModel.Original.MiddleName,
LastName = domainWriterAndAmendmentModel.Original.LastName,
PRO = domainWriterAndAmendmentModel.Original.Society?.Name ?? string.Empty,
CaeIpiNumber = domainWriterAndAmendmentModel.Original.CaeIpiNumber,
IsProMember = domainWriterAndAmendmentModel.Original.IsProMember,
Songs = domainWriterAndAmendmentModel.Original.WriterSplits != null
? domainWriterAndAmendmentModel.Original.WriterSplits
.Select(x => new AssociatedSongsComparisonModel
{
// meta
ID = x.ID,
RowVersion = x.RowVersion,
IsDeleted = x.IsDeleted,
// data
SongTitle = x.RelatedWork.Title,
SongId = x.RelatedWork.UniqueCode,
CreatedDate = x.RelatedWork.CreatedDate,
WriterCount = x.RelatedWork.WorkSplits.Count,
RecordingCount = x.RelatedWork.Recordings.Count
})
.ToList()
: new List<AssociatedSongsComparisonModel>(),
},
ActiveAmendmentWriter = new WriterAmendmentsComparisionModel
{
ID = domainWriterAndAmendmentModel.CurrentAmendment.ID,
RowVersion = domainWriterAndAmendmentModel.CurrentAmendment.RowVersion,
IsDeleted = domainWriterAndAmendmentModel.CurrentAmendment.IsDeleted,
IsNew = domainWriterAndAmendmentModel.CurrentAmendment.IsNew,
FirstName = domainWriterAndAmendmentModel.CurrentAmendment.FirstName,
MiddleName = domainWriterAndAmendmentModel.CurrentAmendment.MiddleName,
LastName = domainWriterAndAmendmentModel.CurrentAmendment.LastName,
PRO = domainWriterAndAmendmentModel.CurrentAmendment.Society?.Name ?? string.Empty,
CaeIpiNumber = domainWriterAndAmendmentModel.CurrentAmendment.CaeIpiNumber,
IsProMember = domainWriterAndAmendmentModel.CurrentAmendment.IsProMember,
Songs = domainWriterAndAmendmentModel.CurrentAmendment.WriterSplitAmendments != null
&& domainWriterAndAmendmentModel.CurrentAmendment.WriterSplitAmendments.Any(x => x.RelatedWorkAmendment != null)
? domainWriterAndAmendmentModel.CurrentAmendment.WriterSplitAmendments
.Select(x => new AssociatedSongsComparisonModel
{
// meta
ID = x.ID,
RowVersion = x.RowVersion,
IsDeleted = x.IsDeleted,
// data
SongId = x.RelatedWorkAmendment.UniqueCode,
SongTitle = x.RelatedWorkAmendment.Title,
CreatedDate = x.RelatedWorkAmendment.CreatedDate,
WriterCount = x.RelatedWorkAmendment.WorkSplitAmendments.Count,
RecordingCount = x.RelatedWorkAmendment.RecordingAmendments.Count
})
.ToList()
: new List<AssociatedSongsComparisonModel>(),
}
};
return writerAndActiveAmendment;
}
[HttpGet]
[ActionName("ViewWriterAmendments")]
[Route("{writercode}/ViewWriterAmendments")]
[AuthorizeTenancy(Roles = "super,administrator")]
public async Task<ActionResult>ViewWriterAmendments(string writercode, int page = 1, int take = Constants.MVC.Pagination.DefaultItemsPerPage, string sortBy = "Name", bool sortAsc = true)
{
if (Request.QueryString["IsAmendment"] != null)
{
ViewBag.IsAmendment = Request.QueryString["IsAmendment"];
}
else
{
ViewBag.IsAmendment = "0";
}
// TEST IF VALID
// ajax method - refuse
if (Request.IsAjaxRequest())
{
return RedirectToAction("WriterAmendments", "SongsManagement");
}
// no writer - refuse
if (string.IsNullOrEmpty(writercode))
{
return RedirectToAction("WriterAmendments", "SongsManagement", new { page, take, sortBy, sortAsc });
}
// get originalWithPossibleActiveAmendment work
var writerAndAmendment = await _artistAccountService.GetWriterAndAmendmentGraphAsync(writercode, includeWritersSplitsAndWorks: true, includeWriterSociety: true);
// not found? - refuse
if (writerAndAmendment.Original == default(WriterGraph.Writer))
{
return RedirectToAction("WriterAmendments", "SongsManagement", new { page, take, sortBy, sortAsc }); // something wrong
}
// writer locked? - refuse
if (writerAndAmendment.Original.IsLocked)
{
return RedirectToAction("WriterAmendments", "SongsManagement", new { page, take, sortBy, sortAsc }); // something wrong
}
// setup view model
var viewModel = MapWriterAndAmendmentToViewModel(writerAndAmendment);
// return view
return View(viewModel);
}
}
}
Есть ли способ заставить его переключаться между двумя вкладками, используя JQuery или другой метод, возможно, IF / ELSE в Razor.Я новичок в MVC.