如何处理Asp中禁用html属性的输入值.净核心Razore页面?



当发送带有禁用html属性的输入到Update an Entity时,当模型状态时,我面临一个空的input tag。IsValid是误。

我想更新一个名为Episode的实体.我的ViewRazore是:

<form method="post" enctype="multipart/form-data">
<input type="hidden" asp-for="@ViewData["EpisodeId"]" />
<input type="hidden" asp-for="@ViewData["EpisodeFileName"]" />
<h2>اطلاعات اپیزود</h2>
<hr />
<div class="col-md-8">
<div class="danger" asp-validation-summary="All"></div>
<div class="form-group">
<label>نام اپیزود</label>
<input type="text" asp-for="@Model.Episode.EpisodeTitle" class="form-control">
<span asp-validation-for="@Model.Episode.EpisodeTitle"></span>
</div>
<div class="form-group">
<label>زمان اپیزود</label>
<input type="datetime" asp-for="@Model.Episode.EpisodeTimeLength" class="form-control">
<span asp-validation-for="@Model.Episode.EpisodeTimeLength"></span>
</div>
<div class="form-group">
<label>Current EpisodeFileName</label>     
<input disabled asp-for="@Model.Episode.EpisodeFileName"  />
</div>
</div>
</form>
如您所见,我有以下代码:
<div class="form-group">
<label>Current EpisodeFileName</label>     
<input disabled asp-for="@Model.Episode.EpisodeFileName"  />
</div>

我想让管理员看到什么当前情节filename(它可以是一个mp4文件或等)是更新时。这是我的EditEpisode.cshtml.cs:

public class EditEpisodeModel : PageModel
{
private ICourseServices _courseServices;
public EditEpisodeModel(ICourseServices courseServices)
{
_courseServices = courseServices;
}
[BindProperty]
public Episode Episode { get; set; }
public void OnGet(int id)
{
Episode = _courseServices.GetEpisodeByEpisodeId(id);
ViewData["EpisodeId"] = id;
ViewData["EpisodeFileName"] = Episode.EpisodeFileName;
}

public IActionResult OnPost(Episode episode)
{
if (!ModelState.IsValid)
{
ModelState.AddModelError("","لطفا تمام فیلد ها را با دقت وارد کنید");
return Page();
}
return Page();
}
}

可以看到,当我的应用程序运行时,我决定将其中一个输入的值保留为空,例如,我将以下输入保留为空:

<input type="text" asp-for="@Model.Episode.EpisodeTitle" class="form-control">
如你所知,因为我的if语句OnPost方法内部:
if (!ModelState.IsValid)
{
ModelState.AddModelError("","لطفا تمام فیلد ها را با دقت وارد کنید");
return Page();
}

我的OnPost方法将调用ReturnPage()。我的问题是为什么当ReturnPage()被调用时,输入<input disabled asp-for="@Model.Episode.EpisodeFileName" />变为空!?只是,当我使用禁用时属性在我的输入标签然后发布信息,我的输入就变成了空!但是当我从输入中删除这个属性时,我没有遇到这个问题!有人能给我解释一下吗?

浏览器不支持禁用属性默认情况下使用表单提交:

禁用和只读之间的区别在于只读控件仍然可以工作并且仍然是可聚焦的,而禁用的控件不能接收焦点并且不与表单一起提交,并且通常在启用之前不能作为控件工作。

对于您的场景,可以将disabled更改为readonly

<input readonly asp-for="@Model.Episode.EpisodeFileName" />