2017-04-10 3 views
1

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

enter image description here

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

aufgelistet

es zeigt, wie diese

enter image description here

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 ???

+0

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

+0

Ich habe die Ansichtsseite in meine Frage eingefügt – user355

+0

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

Antwort

0

Jedes Ding scheinen Lösung des Problems zu sein, in Ordnung ist, dass man Erhalte den Wert des Elements mit dem Attribut name. entweder ändern attribute name name = "postdata" zu name = "postID" in jquery, wo Sie Checkbox anhängen möchten.

oder Sie können Eigenschaftsnamen in Modell ändern postID

0

Ich denke, Sie sollten eine input mit dem Namen 'PostId' erstellen.

Ich sehe eine @Html.LabelFor und eine @Html.ValidationMessageFor, aber wo ist die EditorFor?

Sie benötigen keine HTML-Helper zu verwenden, muss irgendwo eine input (Checkbox) mit dem Namen sein ‚PostId

+0

Ich bekomme das ausgewählte Kontrollkästchen in jquey, aber wie kann ich diesen Wert zum Controller nehmen, um diese ausgewählten Elemente in der Datenbank zu speichern – user355

Verwandte Themen