【发布时间】:2021-03-12 10:23:54
【问题描述】:
在部分视图中更改“性别”下拉菜单后,我试图将“姓名”文本框颜色更改为(如果是男性,则为蓝色,如果是女性,则为粉红色)。
索引视图:
@{
ViewData["Title"] = "Home Page";
var gender = ViewBag.Gender; //breakpoint
}
@if (gender == "Male")
{
<div id="name">
<label asp-for="Name">Name</label>
<input id="nametextbox" type="text" asp-for="Name" style="background-color: lightblue" />
</div>
}
else if (gender == "Female")
{
<div id="name">
<label asp-for="Name">Name</label>
<input id="nametextbox" type="text" asp-for="Name" style="background-color: lightpink" />
</div>
}
else
{
<div id="name">
<label asp-for="Name">Name</label>
<input id="nametextbox" type="text" asp-for="Name" style="background-color: white" />
</div>
}
<div id="gender">
<partial name="_GenderDropdown" model="Model" />
</div>
局部视图:
<label>Gender</label>
<select id="genderstring">
<option value="">Select Gender</option>
<option value="Male">Male</option>
<option value="Female">Female</option>
</select>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function () {
//ajax for posting gender to controller
$('#genderstring').on('change', function () {
$.ajax({
url: '@Url.Action("Index", "Home")',
type: 'GET',
data: { gender: $("#genderstring").val() },
success: function () {
},
error: function () {
}
});
});
});
</script>
控制器:
public IActionResult Index(string gender)
{
if(gender == null)
{
return View(new User { Name = "", Gender = "" });
}
else
{
ViewBag.Gender = gender;
return View("Index"); //breakpoint
}
}
通过这 2 个断点,我可以看到数据正在传递,但是在我更改性别后,它会以视图袋中的性别进入视图,但页面的其余部分没有运行。
【问题讨论】:
-
为什么要使用ajax请求来更新文本框颜色?这是 Javascript 的工作
-
当你说“页面的其余部分没有运行”时,你的意思是局部视图上的 javascript 没有执行吗?您是否尝试将代码移出文档就绪事件处理程序?
-
这是一个挑战,我只是想解决它。当我说页面的其余部分没有运行时,我的意思是当视图以性别返回时,页面不会呈现表单。它基本上不会用改变的颜色重新加载。
-
好吧,
success处理程序中没有任何内容。 -
这有点旧但仍然有效stackoverflow.com/a/11947606/2030565
标签: c# ajax asp.net-core partial