我的部分视图包含在我的_Layout.cshtml中。 此部分视图包含一个正确填充的下拉列表。
当用户选择一个值时,我希望该值在其他任何地方都可用。所以我尝试在会话数据中设置它。
工作正常。
部分观点:
@model MyModel
@using (Ajax.BeginForm("MySelection", "Home", new AjaxOptions()))
{
var optionList = new SelectList(Model.Options, "Key", "Value");
@Html.DropDownListFor(model => model.SelectedOption, optionList,
"--Select--", new { onchange = "this.form.submit(); return false;" })
}
而且,果然,
[HttpPost]
public PartialViewResult MySelection(MyModel model)
{
Session["MySelection"] = model.SelectedOption;
return PartialView("_MyPartial", model);
}
获取匹配,设置会话数据,并返回部分视图。
然而......部分视图全部我明白了!
,而不是停留在同一页面上,只显示部分视图。我正在试图找出如何只是简单地将所选值存储到我的会话数据中,我不需要有视图,部分视图或任何返回的内容,我不需要重新加载数据,重新加载页面,重定向到任何地方。
是什么<(无疑是非常简单!)在我的会话数据中获取所选选项的方式?
正如Ehsan Sajjad建议的那样,确保其他所有内容都到位后,使用(隐藏)按钮提交表单将执行ajax请求,而onchange处理程序中的this.form.submit则不会!
简而言之,现在我有了:
@model MyModel
@using (Ajax.BeginForm("MySelection", "Home", new AjaxOptions()))
{
var optionList = new SelectList(Model.Options, "Key", "Value");
@Html.DropDownListFor(model => model.SelectedOption, optionList,
"--Select--", new { onchange = "submitButton.click();" })
<input type="submit" id="submitButton" class="hidden-button"/>
}
和
[HttpPost]
public void MySelection(MyModel model)
{
Session["MySelection"] = model.SelectedOption;
}
它就像一个魅力。
答案 0 :(得分:2)
如果您不想返回任何内容,请返回EmptyResult:
[HttpPost]
public ActionResult MySelection(MyModel model)
{
Session["MySelection"] = model.SelectedOption;
return new EmptyResult();
}
反过来也可以使用AjaxOptions,在主视图中创建一个容器div:
<div id="container">
</div>
@using (Ajax.BeginForm("MySelection", "Home", new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "conatainer" }))
{
var optionList = new SelectList(Model.Options, "Key", "Value");
@Html.DropDownListFor(model => model.SelectedOption, optionList,
"--Select--", new { onchange = "this.form.submit(); return false;" })
}
你可以返回这样的空内容:
[HttpPost]
public ActionResult MySelection(MyModel model)
{
Session["MySelection"] = model.SelectedOption;
return Content("");
}
您需要添加一个隐藏的提交按钮,并在下拉索引更改时以编程方式触发其点击,因为以编程方式提交表单不会触发原始提交,因此发布的表单不会通过ajax发布并且会发回完整的帖子。
答案 1 :(得分:1)
视图必须对返回的数据执行某些操作。而且由于你还没有告诉它如何处理它,它采用了用返回值替换当前目标的默认行为。
让onChange
的{{1}}事件调用如下函数怎么样:
dropdown
javascript并不完全干净,因为我已经从我们已经实现的“参数化”版本中快速采用了它,但它应该给你一个大概的想法。