【发布时间】:2018-03-27 05:58:14
【问题描述】:
目前我面临一个非常棘手的问题,就是将不同的数据列表从视图传递到控制器。 我创建了两个输入框来将我的数据提交给控制器,以便可以将其保存到 CreateAccountsDB 并进一步显示在列表中 按下 Create 按钮时选择的 Subcon。
我在这里面临的问题是:
当使用 NewCompanyName 文本框和 NewEmail 文本框输入的数据按下 Create 按钮时,这些输入的数据确实将数据从 View 传递到 Controller 并将数据保存到 CreateAccountDB(视图中不显示),但输入的数据不显示在列表中选定的子控制。
这是模型。
public class Tender
{
public int ID { get; set; }
public string CompanyName { get; set; }
public List<CreateAccount> FrequentCompanyName { get; set; }
public List<CreateAccount> SuggestCompanyName { get; set; }
public List<CreateAccount> SelectedCompanyName { get; set; }
public string CompanyNameNew { get; set; }
public string EmailNew { get; set; }
public int? TradeID { get; set; }
public virtual Trade Trade { get; set; }
public int? CreateAccountID { get; set; }
public virtual CreateAccount CreateAccount { get; set; }
}
控制器中Create函数的Get方法如下:
[httpGet]
public ActionResult Create(int? id)
{
Tender tender = new Tender();
tender.FrequentCompanyName = db.createaccountDB.Include(tm => tm.Trade).Where(td => td.Frequency == 32).ToList();
tender.SuggestCompanyName = db.createaccountDB.Include(tm => tm.Trade).ToList();
if (tender.SelectedCompanyName == null)
{
tender.SelectedCompanyName = new List<CreateAccount>().ToList();
}
return View(tender);
}
这是我的创建函数的发布方法:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,CompanyName,TradeID,FrequentCompanyName,SelectedCompanyName,CreateAccountID")] Tender tender ,string CompanyNameNew, string Emailnew)
{
CreateAccount accnew = new CreateAccount();
accnew.CompanyName = CompanyNameNew;
accnew.Email = Emailnew;
if(ModelState.IsValid)
{
db.createaccountDB.Add(accnew);
db.SaveChanges();
}
if (tender.SelectedCompanyName == null)
{
tender.SelectedCompanyName = new List<CreateAccount>().ToList();
}
tender.FrequentCompanyName = db.createaccountDB.Include(tm => tm.Trade).Where(td => td.Frequency == 32).ToList();
tender.SuggestCompanyName = db.createaccountDB.Include(tm => tm.Trade).ToList();
tender.SelectedCompanyName.ToList().Add(accnew);
return View(tender);
}
这是我的创建视图:
@model Tandelion0.Models.Tender
@{
ViewBag.Title = "Create";
}
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-group">
@*@Html.LabelFor(model => model.ProjectName, htmlAttributes: new { @class = "control-label col-md-3" })*@
<div class="col-md-3">
<h5>New Company Name</h5>
@Html.EditorFor(model => model.CompanyNameNew, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.CompanyNameNew, "", new { @class = "text-danger" })
</div>
<div class="col-md-3">
<h5>New Email</h5>
@Html.EditorFor(model => model.EmailNew, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.EmailNew, "", new { @class = "text-danger" })
</div>
<div class="container" align="center">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
<div class="container row">
<!--selected subcon column-->
<div class="container row col-sm-4">
<h4>
Selected Subcon
</h4>
<div style="overflow-y: scroll; height:250px;">
<table class="table table-hover">
@foreach (var item in Model.SelectedCompanyName)
{
<tbody>
<tr>
<td>
@Html.DisplayFor(modelItem => item.CompanyName)
</td>
</tr>
</tbody>
}
</table>
</div>
</div>
</div>
}
到目前为止,当按下创建按钮时,我设法将视图中的数据保存到 CreateAccountsDB 中,但是这些数据无法将其从 Post 方法 Create 函数传递到 Controller 中的 Get 方法 Create 函数。从 post 方法 Create 函数出来后,数据和列表立即变为 null。
由于数据为空,视图无法从控制器接收任何数据。
我可以知道如何解决将数据从控制器传递到视图的问题吗?我传递数据的方式完全错误吗? 任何建议都非常感谢。
【问题讨论】:
标签: asp.net-mvc entity-framework