这非常奇怪,我知道这在过去有效。我必须用其他东西打破它,但我真的不知道是什么。
我是一名具有很少MVC知识的.NET程序员,似乎我在这里缺少一些关键的东西,mvc在后台做的。
让我们尽可能地解释它。
我有一个视图,其中包含:
<tbody>
@foreach (var experienceViewModel in this.ViewData.Model)
{
var id = "GetExperienceDetail" + experienceViewModel.Id;
<tr>
<td>@experienceViewModel.Assessment</td>
<td>@experienceViewModel.CompanyName</td>
<td>@experienceViewModel.Description</td>
<td>@experienceViewModel.StartDate</td>
<td>@experienceViewModel.EndDate</td>
<td width="20"><a href="#" id="@id" onclick="openDetail('@id')" data- controller="Person" data-action="ExperienceDetail" data-key="@experienceViewModel.Id" data-person="@experienceViewModel.PersonId" data-form="ExperienceDetail" title="Wijzig" class="btn btn-xs"><i class="glyphicon glyphicon-pencil"></i></a></td>
<td width="20"><a id="@Html.Raw(id + "delete")" class="confirm-delete" data-keyname="experienceId" data-textfield="@string.Concat(experienceViewModel.Assessment, " | ", experienceViewModel.Description)" data-link="@Html.Raw(id + "delete")" data-key="@experienceViewModel.Id" data-controller="Experience" data-action="ExperienceDelete" href="#" title="Verwijder"><i class="glyphicon glyphicon-remove"></i></a></td>
</tr>
}
它不是最后一个,而是之前的那个。一个用openDetail。这个函数将从js web.js调用,我将在下面粘贴:
function openDetail(link) {
var $link = $('#' + link);
debugger;
var controller = $link.attr('data-controller');
var action = $link.attr('data-action');
var id = $link.attr('data-key');
var form = $link.attr('data-form');
var modelName = $link.attr('data-model');
//default person
if (modelName == null)
modelName = "person";
modelName = modelName.toLowerCase();
var valueModel = $link.attr('data-' + modelName);
var json = "{\"id\" : " + id + ", \"" + modelName + "\"" + " : " + valueModel + "}";
var url = '/' + controller + '/' + action;
$.ajax({
url: '/' + controller + '/' + action,
type: 'POST', // not sending json over url
data: json,
contentType: "application/json; charset=utf-8",
success: function (data) {
$('#partialoveview').html(data);
if (typeof form !== 'undefined' && form !== false) {
$.validator.unobtrusive.parse($('#' + form));
$("span.field-validation-valid").hide();
$('.label-error').hide();
}
loadForm();
},
error: function (data) {
}
});
这个函数完成了这个工作,唯一出错的是dropdownlist,特别是那个导致下面有另一个,并且这有选择它具有的值的正确行为... < / p>
这将通过操作ExperienceDetail(int id,int person)
转到Person控制器 [HttpPost, OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)]
public PartialViewResult ExperienceDetail(int id, int person)
{
var experienceViewModel = new ExperienceViewModel { AssessmentList = this.AssessmentList(), CompanyList = this.CompanyList(), PersonId = person };
if (id > 0)
{
Data.Model.Experience experience = this._experienceRepository.GetExperienceDetail(id);
experienceViewModel = new ExperienceViewModel(experience) { AssessmentList = this.AssessmentList(), CompanyList = this.CompanyList()};
}
return this.PartialView("_ExperienceDetailPartial", experienceViewModel);
}
this.CompanyList从basecontroller获取一个选择列表 返回此视图时,我无法看到此选择列表具有selectedvalue。但是再一次,正在工作的ddl在selectedvalue上也是null,所以这对于在编辑之后设置正确的值是不负责任的吗?
然后是细节屏幕,它从js放入div: 我只是在开始时首先将公司下拉(不工作)然后评估ddl(工作)
@model Emenka.HumanResources.Application.Models.ExperienceViewModel
@using (Html.BeginForm("UpdateExperienceDetail", "Person", FormMethod.Post, new { @id = "ExperienceDetail", @role = "form", data_action = "ExperienceOverview", data_controller = "Person" }))
{
@Html.HiddenFor(m => m.Id)
@Html.HiddenFor(m => m.PersonId)
<fieldset>
<legend>Ervaring</legend>
<div class="row">
<div class="col-md-5">
<div class="form-group">
@Html.LabelFor(m => m.CompanyId, new { @class = "control-label" })
<div class="input-group col-xs-9">
@Html.DropDownListFor(m => m.CompanyId, ViewData.Model.CompanyList, string.Empty, new { @class = "no-focus form-control" })
@* @Html.ValidationMessageFor(m => m.CompanyId, " ")*@
<a href="#modalAdd" role="button" class="input-group-addon btnModal" data- toggle="modal" data-target="#modalAdd" data-controller="Person" data-action="CreateCompany" data-controlid="CompanyId" data-modaltype="Company">...</a>
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.AssessmentId, new { @class = "control-label" })
@Html.DropDownListFor(m => m.AssessmentId, ViewData.Model.AssessmentList, string.Empty, new { @class = "no-focus control-sm-7 form-control" })
@* @Html.ValidationMessageFor(m => m.AssessmentId, " ")*@
</div>
<div class="form-group">
@Html.LabelFor(x => x.StartDate, new { @class = "control-label" })
<div class="input-group col-xs-7">
@Html.TextBoxFor(x => x.StartDate, new { @class = "form-control date-picker", @readonly = "readonly" })
<label for="StartDate" class="input-group-addon glyphicon glyphicon-calendar add-on" />
</div>
</div>
我搜索过并搜索过,我不知道该搜索什么。你们能给我一些提示吗?
PS:不介意数据attrib的空格,我试图在stackoverflow(代码4空格)提交此表单时摆脱错误。
我知道下拉列表中的第三个参数是选择默认值,但这是带有评估下拉列表的string.Empty,这在单击编辑时得到正确的值,因此不是像公司下拉列表那样的空字符串......所以逻辑上这不是问题
答案 0 :(得分:0)
我发现了问题!
设置链接到下拉列表的相应companyId的viewdata属性,解决了我所有的问题。我不知道为什么这在其他页面上起作用,也许我只是错过了它。