Среда:
ASP. NET Ядро MVC 3.1 и библиотека. NET Стандарт
Цели:
Создание объекта из DLL (dll может быть изменена в любой момент) без постоянной структуры, напр. класс Obj {int, string, string}, но другой dll будет иметь класс Obj {int, int, int}.
Передать этот объект для просмотра.
Создайте один «ящик формы», не зная, какими свойствами обладает объект. ех. string => textbox, bool => checkbox et c.
Передать эти данные в метод / контроллер / API.
Моя проблема:
В этот момент я могу получить первые три очка, но не могу передать данные в контроллер. Я попытался отладить его, но метод Index (int x, int y) всегда вызывается с параметрами x = 0, y = 0.
Код:
HomeController.cs
[HttpGet]
public IActionResult Index()
{
Assembly dllAssembly = Assembly.LoadFile(Environment.CurrentDirectory +
"\\TestLib.dll");
Type dllType = dllAssembly.GetType("TestLib.TestModel");
tempObj = Activator.CreateInstance(dllType);
ViewBag.Message = tempObj;
return View();
}
[HttpPost]
public IActionResult Index(int x, int y)
{
Assembly dllAssembly = Assembly.LoadFile(Environment.CurrentDirectory +
"\\TestLib.dll");
Type dllType = dllAssembly.GetType("TestLib.TestModel");
tempObj = Activator.CreateInstance(dllType);
dllType.GetProperty("X").SetValue(tempObj, x);
dllType.GetProperty("Y").SetValue(tempObj, y);
ViewBag.Message = tempObj;
return View();
}
TestModel.cs
public class TestModel
{
[Range(0, 10)]
public int X { get; set; }
[Range(0, 10)]
public int Y { get; set; }
}
Index.cs html
@{
ViewData["Title"] = "Home Page";
var data = ViewBag.Message;
}
@using (@Html.BeginForm())
{
@Html.EditorFor(model => data)
<input type="submit" />
}
Сгенерировано html
<form action="/" method="post">
<div class="editor-label">
<label for="data_X">X</label>
</div>
<div class="editor-field">
<input class="text-box single-line" data-val="true" data-val-range="The field X must be between 0 and 10." data-val-range-max="10" data-val-range-min="0" data-val-required="The X field is required." id="data_X" name="data.X" type="number" value="0">
<span class="field-validation-valid" data-valmsg-for="data.X" data-valmsg-replace="true"></span>
</div>
<div class="editor-label">
<label for="data_Y">Y</label>
</div>
<div class="editor-field"><input class="text-box single-line" data-val="true" data-val-range="The field Y must be between 0 and 10." data-val-range-max="10" data-val-range-min="0" data-val-required="The Y field is required." id="data_Y" name="data.Y" type="number" value="0">
<span class="field-validation-valid" data-valmsg-for="data.Y" data-valmsg-replace="true"></span>
</div>
<input type="submit">
<input name="__RequestVerificationToken" type="hidden" value="deleted">
</form>