ammu11 Ответов: 0

Как сохранить выбранный идентификатор флажка в базе данных в MVC


Я не могу сохранить отмеченный идентификатор флажка в базе данных. Класс модели-это
public partial class Mapping
    {
        public int Id { get; set; }
        public Nullable<int> DistrictId { get; set; }
        public Nullable<int> PostId { get; set; }
        public List<string> GetAllSelctedCheckBoxes { get; set; }
    }
кроме
public List<string> GetAllSelctedCheckBoxes { get; set; }
все остальные поля привязываются к базе данных.
просмотр страницы есть
<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" })
            </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.HiddenFor(m => m.GetAllSelctedCheckBoxes) 
                @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" id="Create"/>
            </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('<input type="checkbox" name="postdata" value=' + post.Text + '>' + post.Text + '<br>');                   
                });
            },
            error: function (ex) {
                alert('Failed to retrieve post.' + ex);
            }
        });
        return false;
    })
});
</script>
<script>
$("#Create").click(function () {
       $('#GetAllSelctedCheckBoxes').empty();
            debugger;
            var getList = [];
            $("#PostMaster input:checked").each(function () {
                getList.push($(this).val());
                var form = ($(this).val());
            });
            $('#GetAllSelctedCheckBoxes').val(getList);// assign to hidden field
   });
</script> 

это моя страница просмотра, здесь я могу установить флажок, и выбранный флажок отображается в
GetAllSelctedCheckBoxes
и это переход к параметру httpPost контроллера.
[HttpPost]
       [ValidateAntiForgeryToken]
       public async Task<ActionResult> Create(Mapping mapping)
       {
          if (ModelState.IsValid)
           {
               db.Mappings.Add(mapping);
               await db.SaveChangesAsync();
               return RedirectToAction("Index");
           }
           return View(mapping);
       }


но я не могу сохранить выбранное значение в БД . может ли sombody, пожалуйста, помочь мне получить решение, что выбранный элемент будет отображаться как строка, и мне нужно сохранить его как interger.

Что я уже пробовал:

Я пробовал много раз и не могу найти правильное решение для моей проблемы

Karthik_Mahalingam

post метод действия для GetPosts

ammu11

GetPost используется для передачи части jquery, которую я показал в своем вопросе

Karthik_Mahalingam

метод c#

ammu11

public JsonResult GetPosts(string id)
{
List & lt;selectlistitem> posts = новый список & lt;selectlistitem>();
var postList = это.Getpost(Конвертировать.ToInt32 (id));
Видовая сумка.Postdata= это.Getpost(Конвертировать.ToInt32 (id));
var postData = postList. Select(m => new SelectListItem()
{
Текст = м.PostName,
Значение = м.ИД.Метод toString(),
});
return Json(postData, JsonRequestBehavior.AllowGet);
}
public IList< postmaster & gt; Getpost(int DistrictId)
{
возвращение дБ.Почтмейстеры.Где (m => m. DistrictID = = DistrictId).Список();
}

Karthik_Mahalingam

так и должно быть

                    $("#PostMaster").append('<input type="checkbox" name="postdata" value=' + post.Value + '>' + post.Text + '<br>');                    

ammu11

Я получил это, но моя проблема в том, как я могу сохранить отмеченный идентификатор флажка в таблице

Karthik_Mahalingam

но это свойство похоже на список строк

 public List<string> GetAllSelctedCheckBoxes { get; set; } 

вы сохраняете его как разделенный запятыми?

ammu11

да, когда я изменяю List & lt;string> На List< int>, Он принимает только одно значение выбранного флажка и выдает ошибку, которую он не может неявно преобразовать из List< int> В int? Как я могу изменить это на множественный выбор ?

Karthik_Mahalingam

как это обрабатывается в БД?

ammu11

либо по отдельному списку, либо в отдельной строке

Karthik_Mahalingam

сделайте свойство модели строкой и передайте его как csv из представления в контроллер.

ammu11

что такое csv ?

Karthik_Mahalingam

значение, разделенное запятыми

ammu11

но как я могу это дать ?

Karthik_Mahalingam

 $('#GetAllSelctedCheckBoxes').val(getList.join(','));

ammu11

могу я задать вам 1 вопрос ?
как преобразовать List< int> В int? ??

Karthik_Mahalingam

преобразование не возможно

ammu11

Я получаю результат как List< int> Так как же я могу сохранить его в базе данных как int ?

Karthik_Mahalingam

перестроить таблицу, чтобы хранить идентификаторы в виде CSV-строку или создать еще одну таблицу для хранения идентификатора

0 Ответов