【发布时间】:2020-07-15 10:25:52
【问题描述】:
环境:
ASP.NET Core MVC 3.1 和库 .NET Standard
目标:
从 DLL 创建对象(dll 可以随时更改),没有常量结构,例如。 class Obj{ int, string, string},但另一个 dll 将具有类 Obj {int, int, int}。
将此对象传递给查看。
在不知道哪些属性具有对象的情况下生成单个“表单框”。前任。 string => 文本框,bool => 复选框等
将此数据传递给方法/控制器/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.cshtml
@{
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>
【问题讨论】:
标签: c# asp.net-mvc asp.net-core reflection parameter-passing