【发布时间】:2017-11-19 14:29:17
【问题描述】:
我的 CSHTML 页面上有一个模型,我使用这种方式:
@model Web.Models.Element
@using (Html.BeginForm("Search", "Company"))
{
@Html.HiddenFor(c => c.Person)
<div class="panel panel-default">
<div class="panel-heading"> Company Search</div>
<div class="panel-body collapse" id="screenCompanySearch">
<form id="formSearch" name="formSearch" method="post">
<fieldset style="margin: 20px;">
<legend>Search</legend>
<div class="row">
<div class="col-xs-2 col-sm-2">
@Html.Label("Company Name")
@Html.TextBoxFor(c => c.Company.Name, new { @class = "form-control" })
</div>
</fieldset>
</form>
</div>
</div>
我的 Javascript 函数是通过这样的按钮单击调用的:
$("#btnSearch").on("click", function() { searchCompany(); })'
在我的 JavaScript 函数中,我需要让这个模型完全加载 TextBoxFor 值:
<script type="text/javascript">
function searchCompany() {
var data = $("#formSearch").serialize();
$.ajax({
url: "@(Url.Action("SearchCompany", "Company"))",
cache: false,
data: data,
type: "POST",
success: alert("sucesso!")
});
}
</script>
我的 Controller 方法正在正确加载,但在 Ajax“数据”参数中传递的模型未填充 TextBoxFor 值。
这是视图的控制器 ActionResult:
public ActionResult Consulta()
{
Element model = new Element();
model.Person = new Person();
return View(model);
}
发生的情况是我的模型正在我的控制器上实例化,但来自 TextBoxFor 的值没有记录在模型的属性中。
我该如何解决这个问题?现在谢谢。
更新
<div class="col-xs-2 col-sm-2">
@Html.Label("Person Name")
@Html.TextBoxFor(c => c.Person.Name, new { @class = "form-control" })
</div>
所以,'c' 等于我的 Element 对象。当我到达控制器方法“搜索”时,通过 ajax 调用传递的参数 Element 不会实例化 Element.Person 这给我 Person = null。
在我的 ActionResult 我有:
Element model = new Element();
model.Person = new Person();
元素类:
public Element()
{
this.Contacts = new List<Contact>();
this.DataType = new DataType();
}
public int ID_Element { get; set; }
public int ID_ElementType { get; set; }
public virtual List<Contact> Contacts { get; set; }
public virtual DataType DataType { get; set; }
public virtual Person Person {get; set; }
控制器动作
[HttpPost]
public JsonResult SearchCompany(Element model)
{
...
}
【问题讨论】:
-
您在哪里以及如何调用
searchCompanyjs 方法?你传递给它什么? -
像我的脚本部分这样: $("#btnSearch").on("click", function() { searchCompany(model) }); @Shyju
-
那里的
model是什么?那是你的 js 对象吗?将相关代码添加到您的原始问题中。 -
您是否尝试通过您的 ajax 调用将相同的模型(
Element对象)发送回服务器,但Company.Name属性值填充了文本框值?你为什么要那样做?如果你正在搜索。您所需要的只是搜索键。仪式?为什么你需要整个模型? -
参数上其实是“型号”。通过这样做@model Web.Models.Element 我的对象模型它已经准备好在我的页面上使用,对吗?一旦我在 Controller 上的 ActionResult 方法上实例化它。
标签: javascript c# ajax asp.net-mvc