我的应用程序发生了一些奇怪的事情。这不是可损坏的,但这是一种奇怪的行为,我正在与您联系以了解正在发生的事情。
我正在研究基于模型的一些局部视图,并且它起作用了。我发现我必须用正确的输入替换很多东西。
所以这是我的旧模型的片段:
public class SearchObjInfo
{
public string m_ObjName { get; set; }
public string m_ObjType { get; set; }
public decimal? m_ObjNumber { get; set; }
public string m_ObjSymbol { get; set; }
public string m_ObjPower { get; set; }
}
这是我为构建这个局部视图而创建的新类的相同片段:
public class SearchObjInfoPartial
{
public string m_ObjName { get; set; }
public IEnumerable<SelectListItem> m_ObjType { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:0}")]
public int m_ObjNumber { get; set; }
public IEnumerable<SelectListItem> m_ObjPower { get; set; }
public IEnumerable<SelectListItem> m_ObjSymbol { get; set; }
}
现在渲染的方式实际上是完全相同的,而不是。我以前用过很多这样的东西:
<label>
Text: Write a name, part of a name, or a word.
</label>
Object Name: @Html.TextBox("_objectName") <br/>
Object Number: <input type="number" min="0" max="9999" name="_objNumber" value="decimal" style="width: 70px"/><br/>
Type: @Html.DropDownList("_objType", "All") <br/>
Power: @Html.DropDownList("_objSymbol", "=") @Html.DropDownList("_objValue", String.Empty)<br/>
但现在我以这种方式呈现我的部分视图:
@model MyApp.Utilities.SearchObjInfoPartial
Object Name: @Html.TextBoxFor(item => item.m_ObjName, Model.m_ObjName, String.Empty) <br/>
Object Number: @Html.EditorFor(item => item.m_ObjNumber)<br />
Power: @Html.DropDownListFor(item => item.m_ObjPower, Model.m_ObjPower, String.Empty) @Html.DropDownListFor(item => item.m_ObjSymbol, Model.m_ObjSymbol, String.Empty)
Type: @Html.DropDownListFor(item => item.m_ObjType, Model.m_ObjType, String.Empty) <br/>
在渲染之前我处理了 SelectLists,这里没有问题。
现在这里变得有趣了:
在我的控制器中,我曾经有接收大量数据的方法(请参阅此处:如何处理许多可能的值以进行查询?)
但现在我做了别的东西。我不假思索地尝试在控制器方法中添加旧的搜索模型,如下所示:
public ActionResult BrowseObjectList(SearchObjInfo searchObj, string _objName, (...))
而且我刚刚发现即使接收对象与我的局部视图模型中使用的对象不同,它也可以工作。这怎么可能呢?我的意思是,正确的字段将被填满,我可以“安全地”处理我的 searchObj 项目,尽管我发现这毕竟不安全......