C# 基于bool动态添加文本框
Case是一个mvc5应用程序 我有一个班级运动队,看起来像这样:C# 基于bool动态添加文本框,c#,jquery,asp.net-mvc,asp.net-mvc-5,C#,Jquery,Asp.net Mvc,Asp.net Mvc 5,Case是一个mvc5应用程序 我有一个班级运动队,看起来像这样: public class Team { public int Id { get; set; } public string TeamName { get; set; } public string Badge { get; set; } public TeamColor? TeamColor { get; set; } public Leag
public class Team
{
public int Id { get; set; }
public string TeamName { get; set; }
public string Badge { get; set; }
public TeamColor? TeamColor { get; set; }
public League? League { get; set; }
public bool HasAlias { get; set; }
public bool IsAlias { get; set; }
public int? AliasId { get; set; }
public virtual Team AliasTeam { get; set; }
public virtual ICollection<Team> Aliases { get; set; }
}
编辑:
通过添加以下js解决了此问题:
$(document).ready(function() {
$("#HasAlias").change(function () {
if (this.checked) {
$(".textboxes").append('<div><input class="form-control text-box single-line" placeholder="enter aliasname" type="text" name="teams"/><a href="#" class="add_field"> <span class=" glyphicon glyphicon-plus-sign"></span></a><a href="#" class="remove_field"> <span class=" glyphicon glyphicon-minus-sign"></span></a></div>');
} else {
$(".textboxes").empty();
}
});
$('.textboxes').on("click", ".add_field", function(e) {
e.preventDefault();
$(".textboxes").append('<div><input class="form-control text-box single-line" placeholder="enter aliasname" type="text" name="teams"/><a href="#" class="add_field"> <span class=" glyphicon glyphicon-plus-sign"></span></a><a href="#" class="remove_field"> <span class=" glyphicon glyphicon-minus-sign"></span></a></div>');
});
$('.textboxes').on("click", ".remove_field", function (e) {
e.preventDefault(); $(this).parent('div').remove();
});
});
我可能误解了整个ViewModel范式。我以为您打算在哪里创建ViewModels,只需要创建结果所需的信息 首先,为什么您的“CreateTeamViewModel”中没有一个“Team”实例?然后您可以在表单中发布该实例-通过模型绑定,您不必在操作中手动填充团队。关于alias文本框的显示,您应该始终将其隐藏在表单中,并根据复选框的值使用javascript使其显示。ToaoG是正确的,默认情况下,模型绑定将为您完成此操作-这就是它的优点,是的,它将处理复杂对象及其复合成员。我建议您使用VS中的自动支架功能,基于CreateTeamViewModel创建一个新视图,我假设该视图反映了基础EF模型。然后看看它产生了什么,并利用回发来了解发生了什么。基本上在这一点上,你是手工编码的东西,大体上是自动的。
$(document).ready(function() {
$("#HasAlias").change(function () {
if (this.checked) {
$(".textboxes").append('<div><input class="form-control text-box single-line" placeholder="enter aliasname" type="text" name="teams"/><a href="#" class="add_field"> <span class=" glyphicon glyphicon-plus-sign"></span></a><a href="#" class="remove_field"> <span class=" glyphicon glyphicon-minus-sign"></span></a></div>');
} else {
$(".textboxes").empty();
}
});
$('.textboxes').on("click", ".add_field", function(e) {
e.preventDefault();
$(".textboxes").append('<div><input class="form-control text-box single-line" placeholder="enter aliasname" type="text" name="teams"/><a href="#" class="add_field"> <span class=" glyphicon glyphicon-plus-sign"></span></a><a href="#" class="remove_field"> <span class=" glyphicon glyphicon-minus-sign"></span></a></div>');
});
$('.textboxes').on("click", ".remove_field", function (e) {
e.preventDefault(); $(this).parent('div').remove();
});
});
public ActionResult CreateTeam(CreateTeamViewModel model, string[] teams)
{
if (ModelState.IsValid)
{
var team = new Team
{
TeamName = model.TeamName,
TeamColor = model.TeamColor,
League = model.League,
HasAlias = model.HasAlias
};
db.Teams.Add(team);
db.SaveChanges();
foreach (var s in teams)
{
var t = new Team
{
TeamName = s,
AliasId = team.Id,
IsAlias = true
};
db.Teams.Add(t);
db.SaveChanges();
}
return RedirectToAction("Index");
}
return View(model);
}