Привязка формы: измените модель на FormModel - PullRequest
0 голосов
/ 20 сентября 2018

В ASP.NET Core MVC я использую привязку модели для каскадного выпадающего списка, но теперь, когда я пытаюсь интегрировать другое поле в мою форму, я застрял, поскольку я привык работать с FormModel.

Что мне нужно, так это два каскадных выпадающих списка, привязанных к базе данных, две радиокнопки и другое поле и кнопка «Evaluate», которая перенаправит пользователя в другое представление (называемое «Evaluate»), где я могу получить свои значения, используя модельназывается BasicEvaluationForm, как показано ниже

[HttpPost]
public IActionResult Evaluate(BasicEvaluationForm form)

Ниже вы найдете некоторые фрагменты кода из Моделей, Контроллера и Представления

Спасибо за любую помощь!

Модели, используемые для раскрывающегося каскадного списка

public class Make
{
    [Key]
    public int MakeID { get; set; }
    public string MakeName{ get; set; }
    [NotMapped]
    public int ModelID { get; set; }
}

public class Model
{
    [Key]
    public int ModelID { get; set; }
    public int MakeID { get; set; }
    public string ModelName { get; set; }
}

BasicEvaluationForm Я пытаюсь интегрировать

public class BasicEvaluationForm
{
    public Model model { get; set; }
    public Make make { get; set; }
    public string gearingType { get; set; }
    public int mileage { get; set; }
}

Контроллер

public class HomeController : Controller
{
    private readonly DatabaseContext _context;

    public HomeController(DatabaseContext context)
    {
        _context = context;
    }

    [HttpPost]
    public IActionResult Evaluate(BasicEvaluationForm form)
    {
        if (ModelState.IsValid)
        {
            try
            {
                string makeTxt = form.model;
                string modelTxt = form.make;
                string kilometrage = form.kilometrage.ToString();
                string gearingType = form.gearingType;

                var model = new PredictionService().PredictPrice(makeTxt, modelTxt, mileage, gearingType).Result;
                return View("Evaluate", model);
            }
            catch (Exception e)
            {
                ViewBag.Error = e.Message;
            }
        }
        return View();
    }

    [HttpPost]
    public IActionResult Index(Make objcategory, FormCollection formCollection)
    {
        var ModelID= HttpContext.Request.Form["ModelID"].ToString();

        List<Make> makelist = new List<Make>();
        makelist = (from make in _context.Make
                    select make).ToList();
        makelist.Insert(0, new Make { MakeID = 0, MakeName = "Select" });

        ViewBag.ListofMake = makelist;
        return View(objcategory);
    }

    public JsonResult GetModel(int MakeID)
    {
        List<Model> modellist = new List<Model>();

        modellist = (from model in _context.Model
                     where model.MakeID == MakeID
                     select model).ToList();

        modellist.Insert(0, new Model { ModelID = 0, ModelName = "Select" });


        return Json(new SelectList(modellist, "ModelID", "ModelName"));
    }

    public IActionResult Index()
    {
        List<Make> makeList = new List<Make>();
        makeList = (from make in _context.Make select make).ToList();
        makeList.Insert(0, new Make { MakeID = 0, MakeName = "Select" });

        ViewBag.ListOfMake = makeList;
        return View();
    }
  }
}

Просмотр

@model whatstheprice.io.basic.Models.Make

@{
<script src="/lib/jquery/dist/jquery.js"></script>

<script type="text/javascript">
    $(document).ready(function () {
        var items = "<option value='0'>Select</option>";
        $('#ModelID').html(items);
    });
</script>

<script type="text/javascript">
    $(document).ready(function () {
        $('#MakeID').change(function () {
            var url = '@Url.Content("~/")' + "Home/GetModel";
            var ddlsource = "#MakeID";
            $.getJSON(url, { MakeID: $(ddlsource).val() }, function (data) {
                var items = '';
                $("#ModelID").empty();
                $.each(data, function (i, model) {
                    items += "<option value='" + model.value + "'>" + model.text + "</option>";
                });
                $('#ModelID').html(items);
            });
        });
    });
</script>

<form asp-controller="Home" asp-action="Index" method="post" class="form-horizontal" role="form">
    <div class="form-group">
        <div class="row">
            <div class="alert-danger" asp-validation-summary="ModelOnly"></div>
            <div class="col-xs-12 col-sm-6 col-md-6 col-lg-4">
                <label asp-for="MakeName" class="control-label"></label>
                <select asp-for="MakeID"
                        class="form-control"
                        asp-items="@(new SelectList(@ViewBag.ListofMake,"MakeID", "MakeName"))"></select>
            </div>
        </div>
    </div>

    <div class="form-group">
        <div class="row">
            <div class="col-xs-12 col-sm-6 col-md-6 col-lg-4">
                <label class="control-label">ModelName</label>
                <select class="form-control" id="ModelID" name="ModelID" asp-for="ModelID"
                        asp-items="@(new SelectList(string.Empty,"ModelID", "ModelName"))"></select>
            </div>
        </div>
    </div>
</form>
}
...