【发布时间】:2017-09-05 02:18:20
【问题描述】:
我正在开发一个 MVC 项目,我的任务是在复选框中选择多个项目,并希望将这些选定的项目保存到数据库中。为此,我创建了三个表。第一个是DistrictMaster
public partial class DistrictMaster
{
public int Id { get; set; }
public string DistrictName { get; set; }
public virtual ICollection<PostMaster> PostMasters { get; set; }
}
这里我正在输入各个地区,这会保存到数据库中 第二张表PostMaster
public partial class PostMaster
{
public int Id { get; set; }
public string PostName { get; set; }
public string PIN { get; set; }
public Nullable<int> DistrictID { get; set; }
public virtual DistrictMaster DistrictMaster { get; set; }
}
在这里,我根据从下拉列表中选择的地区输入不同的帖子。 DistrictID 为外键,将密码和名称保存到表中对应的地区
第三张表是AgentPostMapping
public partial class AgentPostMapping
{
public int Id { get; set; }
public Nullable<int> AgentId { get; set; }
public Nullable<int> PostId { get; set; }
public Nullable<System.DateTime> EffectDate { get; set; }
}
这里的 PostId 不是外键,我需要将复选框中选定或选中的项目保存为该 postId 的整数。这是我做起来很麻烦的部分。
控制器
public ActionResult Create()
{
ViewBag.AgentId = new SelectList(db.AgentMasters, "ID", "FirstName");
ViewBag.DistrictId = new SelectList(db.DistrictMasters, "Id", "DistrictName");
return View();
}
public JsonResult GetPosts(string id)
{
List<SelectListItem> posts = new List<SelectListItem>();
var postList = this.Getpost(Convert.ToInt32(id));
ViewBag.Postdata= this.Getpost(Convert.ToInt32(id));
var postData = postList.Select(m => new SelectListItem()
{
Text = m.PostName,
Value = m.Id.ToString(),
});
return Json(postData, JsonRequestBehavior.AllowGet);
}
public IList<PostMaster> Getpost(int DistrictId)
{
return db.PostMasters.Where(m => m.DistrictID == DistrictId).ToList();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create([Bind(Include = "Id,AgentId,PostId,EffectDate")] AgentPostMapping agentPostMapping, FormCollection formdata)
{
if (ModelState.IsValid)
{
db.AgentPostMappings.Add(agentPostMapping);
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
ViewBag.AgentId = new SelectList(db.AgentMasters, "ID", "FirstName", agentPostMapping.AgentId);
return View(agentPostMapping);
}
这是我的控制器部分而且我没有在 [HttpPost] 中编写代码。谁能帮我写代码保存到数据库。
查看(创建)
@model BeyondThemes.BeyondAdmin.Models.AgentPostMapping
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.AgentId,"AgentName", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("AgentId", null, "select", htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.AgentId, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.Label("District", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("DistrictId", ViewBag.DistrictId as SelectList, "-- Please Select --", new { style = "width:250px" })
@*@Html.DropDownList("DistrictID", null, "select", htmlAttributes: new { @class = "form-control" })*@
@*@Html.ValidationMessageFor(model => model.PostMaster.DistrictID, "", new { @class = "text-danger" })*@
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.PostId,"PostName", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
<div id="PostMaster"></div>
@Html.ValidationMessageFor(model => model.PostId, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<script type="text/javascript">
$(document).ready(function () {
//District Dropdown Selectedchange event
$("#DistrictId").change(function () {
$("#PostMaster").empty();
$.ajax({
type: 'POST',
url: '@Url.Action("GetPosts")', // Calling json method
dataType: 'json',
data: { id: $("#DistrictId").val() },
// Get Selected post id.
success: function (posts) {
$.each(posts, function (i, post) {
//$("#PostMaster").append('<option value="' + post.Value + '">' +
// post.Text + '</option>');
$("#PostMaster").append('<input type="checkbox" name="postdata">' + post.Text+'<br>');
});
},
error: function (ex) {
alert('Failed to retrieve post.' + ex);
}
});
return false;
})
});
这是页面外观的屏幕截图
当我通过选中复选框点击创建按钮时,所选复选框未在创建参数的 [HttpPost] 中列出
它是这样显示的
为什么 PostId 中没有显示该值。谁能帮我找到解决方案。这个怎么解决???
【问题讨论】:
-
复选框的模型应该是一个字符串数组。每个选中的复选框都对应于数组中的一个字符串元素(它的 ID)。如果您创建一个只有复选框的简单演示,也许这个问题更容易回答。还请在您的问题中显示视图。
-
我的问题中包含了查看页面
-
对我来说这看起来很复杂,但也许我错过了你想要做的事情。看看这个解决方案:stackoverflow.com/questions/25038736/…
-
不,我没有得到那个解决方案。但是为什么选择的项目没有显示在控制器中创建的post方法中??
标签: jquery sql-server asp.net-mvc asp.net-mvc-4 checkbox