Ich entwickle ein MVC-Projekt und ich habe die Aufgabe, mehr als ein Element in der Checkbox auszuwählen und diese ausgewählten Artikel in der Datenbank speichern möchten. Dafür habe ich drei Tabellen erstellt. Erstens ist ein DistrictMasterWie man mehrere ausgewählte Checkbox Wert zu Datenbank mvc
public partial class DistrictMaster
{
public int Id { get; set; }
public string DistrictName { get; set; }
public virtual ICollection<PostMaster> PostMasters { get; set; }
}
Hier Iam verschiedenen Bezirken Eingabe und das spart auf Datenbank zweite Tabelle 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; }
}
hier ich verschiedene Posten basierend aus der Dropdown-Liste ausgewählt auf den Bezirk am eingeben. Die DistrictID ist Fremdschlüssel und den PIN-Code und Namen der entsprechenden Bezirk in Tabelle
Die dritte Tabelle ist 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; }
}
Hier die postID ist nicht Fremdschlüssel speichern, und ich muss die gewählte oder geprüft speichern Elemente im Kontrollkästchen als Interger zu dieser Post-ID. Dies ist der Teil, in dem ich Schwierigkeiten habe.
Controller
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);
}
Dies ist mein Controller Teil Und ich habe den Code in [Httppost] nicht schreiben. Kann mir bitte jemand helfen, Code zu schreiben, um in db zu speichern.
Ansicht (create)
@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;
})
});
Dies ist der Screenshot, wie die Seite wie
zu suchen, wenn ich auf die Schaltfläche erstellen getroffen durch die Auswahl Kontrollkästchen Das ausgewählte Kontrollkästchen wird nicht in [HttpPost] des Erstellungs-Parameters
aufgelistetes zeigt, wie diese
warum ist, dass der Wert nicht in postID zeigt. Kann mir bitte jemand helfen, eine Lösung dafür zu finden. Wie kann ich das lösen ???
das Modell Ihres Kontrollkästchen postdta sollte ein Array von Strings sein. Jedes ausgewählte Kontrollkästchen entspricht einem String-Element (seiner ID) im Array. Vielleicht ist diese Frage leichter zu beantworten, wenn Sie eine einfache Demo mit nur den Kontrollkästchen erstellen. Bitte zeigen Sie auch die Ansicht in Ihrer Frage an. – roberth
Ich habe die Ansichtsseite in meine Frage eingefügt – user355
Es sieht viel zu komplex für mich aus, aber vielleicht fehlt mir was du versuchst zu tun. Werfen Sie einen Blick auf diese Lösung: http://stackoverflow.com/questions/25038736/post-checked-checkboxes-to-controller-action-without-using-html-helper-like-html – roberth