我一直在做一个小型学校项目,并决定第一次使用.net core(MVC)。我有一个小按钮,我可以单击它在后台执行“ipconfig”命令,并在文本区域中显示输出。起初,我的团队合作伙伴只使用了
public string Result;
ViewModel中的视图。在视图中,它通过
显示<textarea asp-for="Result"></textarea>
所以我决定将它变成一个默认为get和set的属性:
public string Result { get; set; }
但是当我这样做时,如果我在视图中保持与我的团队成员在使用字段而不是属性时所做的相同方法时,输出不会显示在textarea中。相反,我必须这样做才能让它出现在textarea中:
<textarea>@Model.Result</textarea>
现在我问自己为什么会这样。我不能用asp-for显示属性吗?什么会更好地使用,作为结果的字段或属性?
非常感谢提前!
答案 0 :(得分:0)
您实际上应该使用属性,如果<textarea>@Model.Result</textarea>
有效,<textarea asp-for="Result"></textarea>
也应该如此。唯一的原因是ModelState
Result
的值不同(因为后一种形式实际使用ModelState
,而前者显然使用Model
直接)。
ModelState
由Request
,ViewData
/ ViewBag
和最后Model
的值组成,例如,如果您要执行类似的操作ViewBag.Result = String.Empty
,实际上会覆盖Model
中ModelState
的值。
这里没有足够的代码来真正诊断确切的问题,但我会寻找你可能正在使用的其他地方&#34;结果&#34; (不区分大小写)。如果您将其视为请求参数或设置ViewBag
成员等等,那就是您的问题。
答案 1 :(得分:0)
在我的情况下,由于我的文本区域上没有单独的结束标签,因此发生了这种情况。我知道上面的示例在使用diameterSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Object diameterFilter = spinnerAdapter.getItemAtPosition(position); // here is the change
dAdapter.getFilter().filter(diameterFilter.toString());
dAdapter.notifyDataSetChanged();
}
// rest of your code
方法时具有该示例,但是如果是复制/粘贴错误,则可能需要再次查看。
asp-for
相对于:
<textarea asp-for="Message" type="text" class="form-control" rows="5" id="MessageInputField" autofocus></textarea>
在我看来,这是令人讨厌的“陷阱”之类的行为。也许如果有人想告诉我为什么不是,那么请启发我,我总是愿意学习。