我知道发布了一个非常相似的问题并且已经发布了: How to gracefully handle AJAX PartialView update when Javascript is disabled
但那个解决方案并不令我满意。
是否可以在禁用Java Script时使用Ajax Helper方法更新Element,它是否会在同一页面中显示部分视图而不是在额外的选项卡中?
当我点击AJAX ActionLink时,我希望使用部分视图(_Details)更新索引视图中的标记。 使用PView 1方法,我在启用和禁用JS时获得相同的结果。但是我不赞成PView 1解决方案(如类似问题所示),因为这会使Partial View类无用。无论如何,当我重新加载孔页时,为什么还需要它。 我更喜欢类似于PView 2的解决方案。但是当禁用JS时,部分视图会在新的Tab中打开。
到目前为止我的简化代码:
HomeController Class
public class HomeController : Controller
{
public ActionResult Index()
{
var obj_str = new SimpleString { astr = "Nothing Yet" };
return View(obj_str);
}
public ActionResult PView1()
{
string str_posted = "String of PView 1";
var obj_str = new SimpleString {astr = str_posted};
if (Request.IsAjaxRequest())
{
return PartialView("_Details", obj_str);
}else
{
return View("Index", obj_str);
}
}
public PartialViewResult PView2()
{
var obj_str = new SimpleString {astr = "String of PView 2"};
return PartialView("_Details", obj_str);
}
}
Index.cshtml
<h2>AJAX Actionlink Index</h2>
@Ajax.ActionLink("Click me for PView 1", "PView1", new AjaxOptions
{
UpdateTargetId = "partv",
InsertionMode = InsertionMode.Replace,
HttpMethod = "GET"
})
@Ajax.ActionLink("Click me for PView 2", "PView2", "Home", new AjaxOptions
{
UpdateTargetId = "partv",
InsertionMode = InsertionMode.Replace,
HttpMethod = "GET"
})
<h3>Partial View here!</h3>
<div id="partv">
<p>@Model.astr</p>
</div>
_Details.cshtml(部分视图)
@model MVCPartialViewTest.Models.SimpleString
<p>This is from the Partial View cshtml</p>
<p>@Model.astr</p>
SimpleString类(模型)
public class SimpleString
{
public string astr { get; set; }
}