C# MVC模型/上下文工作流程
还有一个MVC问题 我正在开发一个Web应用程序工具,它可以处理很多数据库请求等。这一页让我在MVC中遇到了很多困难 我以前用C#创建过这个页面,它看起来就是这样 最多可以相邻显示4个轴网以比较值 现在在MVC中,我想用这种方式解决这个问题: 然而,我总是收到随机错误消息通常是基于连接问题。。。我尝试了很多不同的东西,这就是为什么我的代码现在有点混乱,但这里是最重要的部分。(示例中只有2个选项) 查看C# MVC模型/上下文工作流程,c#,asp.net-mvc,model,telerik,C#,Asp.net Mvc,Model,Telerik,还有一个MVC问题 我正在开发一个Web应用程序工具,它可以处理很多数据库请求等。这一页让我在MVC中遇到了很多困难 我以前用C#创建过这个页面,它看起来就是这样 最多可以相邻显示4个轴网以比较值 现在在MVC中,我想用这种方式解决这个问题: 然而,我总是收到随机错误消息通常是基于连接问题。。。我尝试了很多不同的东西,这就是为什么我的代码现在有点混乱,但这里是最重要的部分。(示例中只有2个选项) 查看 <script type="text/javascript"> $
<script type="text/javascript">
$(document).ready(function () {
$.ajaxSetup({
error: function (xhr, status, error) {
alert("An AJAX error occured: " + status + "\nError: " + error);
}
});
$('#btnSubmit').click(function () {
var time = new Date().getTime(); // @* unique random number to workaround IE cache issue - IE will cache the ajax if you don't use this *@
var oMainDDL1 = $('#MainDDL1').data("tComboBox");
var oSubDDL1 = $('#SubDDL1').data("tComboBox");
var sSearch1 = $("#Search1").val();
var oMainDDL2 = $('#MainDDL2').data("tComboBox");
var oSubDDL2 = $('#SubDDL2').data("tComboBox");
var sSearch2 = $("#Search2").val();
var actionURL = '@Url.Action("getGrid1", "DataSearch", new { MainDDL1 = "PLACEHOLDER" })'.replace('PLACEHOLDER', oMainDDL1.value()) + "&SubDDL1=" + oSubDDL1.value() + "&Search1=" + sSearch1 + "&time=" + time;
if (actionURL != null) {
alert('actionURL');
$.get(actionURL, function (data) {
$('#result1').fadeOut('slow', 'linear', function () { $('#result1').empty(); $('#result1').append(data); });
$('#result1').fadeIn('slow', 'linear', function () {
if ($.browser.msie) {
this.style.removeAttribute('filter'); // @* Needed to fix IE7 cleartype bug with jQuery fade, but will crap out on FF/Chrome *@
}
});
});
}
actionURL = '@Url.Action("getGrid2", "DataSearch", new { MainDDL2 = "PLACEHOLDER" })'.replace('PLACEHOLDER', oMainDDL2.value()) + "&SubDDL2=" + oSubDDL2.value() + "&Search2=" + sSearch2 + "&time=" + time;
if (actionURL != null) {
alert('actionURL');
$.get(actionURL, function (data) {
$('#result2').fadeOut('slow', 'linear', function () { $('#result2').empty(); $('#result2').append(data); });
$('#result2').fadeIn('slow', 'linear', function () {
if ($.browser.msie) {
this.style.removeAttribute('filter'); // @* Needed to fix IE7 cleartype bug with jQuery fade, but will crap out on FF/Chrome *@
}
});
});
}
});
});
function onMainDDL1Change(e) {
var combo = $("#SubDDL1").data("tComboBox");
combo.value("");
combo.reload();
}
function onSubDDL1DataBinding(e) {
var combo = $("#MainDDL1").data("tComboBox");
e.data = $.extend({}, e.data, { mainDDL1ID: combo.value() });
}
function onMainDDL2Change(e) {
var combo = $("#SubDDL2").data("tComboBox");
combo.value("");
combo.reload();
}
function onSubDDL2DataBinding(e) {
var combo = $("#MainDDL2").data("tComboBox");
e.data = $.extend({}, e.data, { mainDDL2ID: combo.value() });
}
</script>
<table>
<tr>
<td>
@(Html.Telerik().ComboBox()
.Name("MainDDL1")
.AutoFill(true)
.DataBinding(binding => binding.Ajax().Select("LoadMainDDL", "DataSearch"))
.HighlightFirstMatch(true)
.ClientEvents(events => events.OnChange("onMainDDL1Change"))
)
</td>
<td>
@(Html.Telerik().ComboBox()
.Name("MainDDL2")
.AutoFill(true)
.DataBinding(binding => binding.Ajax().Select("LoadMainDDL", "DataSearch"))
.HighlightFirstMatch(true)
.ClientEvents(events => events.OnChange("onMainDDL2Change"))
)
</td>
</tr>
<tr>
<td>
@(Html.Telerik().ComboBox()
.Name("SubDDL1")
.DataBinding(binding => binding.Ajax().Select("LoadSubDDL1", "DataSearch"))
.HighlightFirstMatch(true)
.ClientEvents(events => events.OnDataBinding("onSubDDL1DataBinding"))
)
</td>
<td>
@(Html.Telerik().ComboBox()
.Name("SubDDL2")
.DataBinding(binding => binding.Ajax().Select("LoadSubDDL2", "DataSearch"))
.HighlightFirstMatch(true)
.ClientEvents(events => events.OnDataBinding("onSubDDL2DataBinding"))
)
</td>
</tr>
<tr>
<td>
@Html.TextBox("Search1")
</td>
<td>
@Html.TextBox("Search2")
</td>
</tr>
<tr align="center">
<td colspan="4">
<input type="button" class="t-button button1" value="Search" id="btnSubmit" />
</td>
</tr>
</table>
<div id="result1">
</div>
<div id="result2">
</div>
传递maindl1、SubDDL1、Search1、maindl2、SubDDL2、Search2(此操作有效)
控制器
public PartialViewResult getGrid1(string MainDDL1, string SubDDL1, string Search1)
{
DataSearchModel voModel = new DataSearchModel();
voModel.dtResultSet1 = DLA.DataSearchContext.getResultSet1(MainDDL1, SubDDL1, Search1);
return PartialView(MainDDL1, voModel);
}
public PartialViewResult getGrid2(string MainDDL2, string SubDDL2, string Search2)
{
DataSearchModel voModel = new DataSearchModel();
voModel.dtResultSet2 = DLA.DataSearchContext.getResultSet2(MainDDL2, SubDDL2, Search2);
return PartialView(MainDDL2, voModel);
}
public ViewResult DataSearch(string text)
{
DataSearchModel oModel = new DataSearchModel();
oModel.alMainDDL = DLA.DataSearchContext.getMainDDL();
return View(oModel);
}
public PartialViewResult getGrid1(string MainDDL1, string SubDDL1, string Search1)
{
DataSearchModel voModel = new DataSearchModel();
voModel.dtResultSet = DLA.DataSearchContext.getResultSet(MainDDL1, SubDDL1, Search1);
return PartialView(MainDDL1, voModel);
}
public PartialViewResult getGrid2(string MainDDL2, string SubDDL2, string Search2)
{
DataSearchModel voModel = new DataSearchModel();
voModel.dtResultSet = DLA.DataSearchContext.getResultSet(MainDDL2, SubDDL2, Search2);
return PartialView(MainDDL2, voModel);
}
我真的不喜欢使用dtResultSet1和dtResultSet2,而不是只调用同一个方法。为什么我不能直接调用getResultSet、dtResultSet等等。?!既然我创建了新模型,那么模型应该有自己的方法吗?或者是与对象不可比较的模型
型号
DTResultSetT1、DTResultSetT2、搜索字符串等的声明
上下文
public static DataTable getResultSet1(string sChoice, string sFeat, string sSearch)
{
return setResultSet1(sChoice, sFeat, sSearch);
}
private static DataTable setResultSet1(string sChoice, string sFeat, string sSearch)
{
DataTable dtTemp = new DataTable();
string sQuery = setSqlQuery(sChoice, sFeat, sSearch);
OleDbConnection dbConnection = null;
// Instantiate the Connection Object
dbConnection = new OleDbConnection(ConfigurationManager.ConnectionStrings["OracleDataBase"].ConnectionString);
//dbConnection.Open();
dbConnection.Open();
OleDbCommand dbCommand = null;
// Instantiate the Command Object
dbCommand = new OleDbCommand(sQuery, dbConnection);
dbCommand.CommandType = CommandType.Text;
OleDbDataReader dr = null;
// Execute the Stored Procedure
dr = dbCommand.ExecuteReader();
dtTemp = setResultSetRows(dtTemp, sChoice, dr);
dr.Dispose();
dbConnection.Close();
return dtTemp;
}
private static string setSqlQuery(string sChoice, string sFeat, string sSearch)
{
switch (sChoice)
{
case "T_PRCL":
case "T_PRCL_FEA":
case "T_GIS_PRCL":
return "SELECT * FROM " + sChoice + " WHERE " + sFeat + "='" + sSearch + "' and sys_del_flag = 0";
case "SGD_SFC_FEAT":
case "MSURFACE":
case "SGD_MIN_FEAT":
case "MMINERAL":
return "SELECT * FROM " + sChoice + " WHERE " + sFeat + "='" + sSearch + "' AND EXPIRY_DATE is NULL";
case "V_SURFACE":
case "V_MINERAL":
return "SELECT * FROM " + sChoice + " WHERE " + sFeat + "='" + sSearch + "'";
default:
return "SELECT sysdate as UNKNOWN_ERROR from dual";
}
}
第二章为研究方法。一个完全一样。。在这里,我还是希望将所有内容放在一个名为getResultSet的静态方法中。此外,我确实将连接作为一个全局变量(OleDBConnection=null等),而连接等都是自己的方法。每当连接重叠时,这就给了我更多的随机错误。通常情况下,如果一个读卡器在另一个读卡器之前完成。我不明白,因为它们是不同的模型(对象),它们不应该使用自己的独立变量,对象吗
我希望有人能对此有所启发 在Pabloker的Tipp检查之后,我能够解决我的问题 下面是代码中最重要的部分 上下文
public class MyConnectionManager : IDisposable
{
[ThreadStatic] // static per thread
private static OleDbConnection con;
public static OleDbConnection Connection
{
get
{
if (con == null)
{
con = new OleDbConnection(ConfigurationManager.ConnectionStrings["OracleDataBase"].ConnectionString);
con.Open();
}
return con;
}
}
public void Dispose()
{
if (con != null)
{
con.Close();
}
}
}
private static DataTable setResultSet(string sChoice, string sFeat, string sSearch)
{
DataTable dtTemp = new DataTable();
string sQuery = setSqlQuery(sChoice, sFeat, sSearch);
// Instantiate the Command Object
OleDbCommand dbCommand = new OleDbCommand(sQuery, MyConnectionManager.Connection);
dbCommand.CommandType = CommandType.Text;
// Execute the Stored Procedure
OleDbDataReader dr = dbCommand.ExecuteReader();
dtTemp = setResultSetRows(dtTemp, sChoice, dr);
return dtTemp;
}
public static DataTable getResultSet(string sChoice, string sFeat, string sSearch)
{
return setResultSet(sChoice, sFeat, sSearch);
}
型号
public DataTable dtResultSet { get; set; }
控制器
public PartialViewResult getGrid1(string MainDDL1, string SubDDL1, string Search1)
{
DataSearchModel voModel = new DataSearchModel();
voModel.dtResultSet1 = DLA.DataSearchContext.getResultSet1(MainDDL1, SubDDL1, Search1);
return PartialView(MainDDL1, voModel);
}
public PartialViewResult getGrid2(string MainDDL2, string SubDDL2, string Search2)
{
DataSearchModel voModel = new DataSearchModel();
voModel.dtResultSet2 = DLA.DataSearchContext.getResultSet2(MainDDL2, SubDDL2, Search2);
return PartialView(MainDDL2, voModel);
}
public ViewResult DataSearch(string text)
{
DataSearchModel oModel = new DataSearchModel();
oModel.alMainDDL = DLA.DataSearchContext.getMainDDL();
return View(oModel);
}
public PartialViewResult getGrid1(string MainDDL1, string SubDDL1, string Search1)
{
DataSearchModel voModel = new DataSearchModel();
voModel.dtResultSet = DLA.DataSearchContext.getResultSet(MainDDL1, SubDDL1, Search1);
return PartialView(MainDDL1, voModel);
}
public PartialViewResult getGrid2(string MainDDL2, string SubDDL2, string Search2)
{
DataSearchModel voModel = new DataSearchModel();
voModel.dtResultSet = DLA.DataSearchContext.getResultSet(MainDDL2, SubDDL2, Search2);
return PartialView(MainDDL2, voModel);
}
查看
<script type="text/javascript">
$(document).ready(function () {
$.ajaxSetup({
error: function (xhr, status, error) {
alert("An AJAX error occured: " + status + "\nError: " + error);
}
});
$('#btnSubmit').click(function () {
var time = new Date().getTime(); // @* unique random number to workaround IE cache issue - IE will cache the ajax if you don't use this *@
var oMainDDL1 = $('#MainDDL1').data("tComboBox");
var oSubDDL1 = $('#SubDDL1').data("tComboBox");
var sSearch1 = $("#Search1").val();
var oMainDDL2 = $('#MainDDL2').data("tComboBox");
var oSubDDL2 = $('#SubDDL2').data("tComboBox");
var sSearch2 = $("#Search2").val();
var actionURL = '@Url.Action("getGrid1", "DataSearch", new { MainDDL1 = "PLACEHOLDER" })'.replace('PLACEHOLDER', oMainDDL1.value()) + "&SubDDL1=" + oSubDDL1.value() + "&Search1=" + sSearch1 + "&time=" + time;
if (actionURL != null) {
alert('actionURL');
$.get(actionURL, function (data) {
$('#result1').fadeOut('slow', 'linear', function () { $('#result1').empty(); $('#result1').append(data); });
$('#result1').fadeIn('slow', 'linear', function () {
if ($.browser.msie) {
this.style.removeAttribute('filter'); // @* Needed to fix IE7 cleartype bug with jQuery fade, but will crap out on FF/Chrome *@
}
});
});
}
actionURL = '@Url.Action("getGrid2", "DataSearch", new { MainDDL2 = "PLACEHOLDER" })'.replace('PLACEHOLDER', oMainDDL2.value()) + "&SubDDL2=" + oSubDDL2.value() + "&Search2=" + sSearch2 + "&time=" + time;
if (actionURL != null) {
alert('actionURL');
$.get(actionURL, function (data) {
$('#result2').fadeOut('slow', 'linear', function () { $('#result2').empty(); $('#result2').append(data); });
$('#result2').fadeIn('slow', 'linear', function () {
if ($.browser.msie) {
this.style.removeAttribute('filter'); // @* Needed to fix IE7 cleartype bug with jQuery fade, but will crap out on FF/Chrome *@
}
});
});
}
});
});
function onMainDDL1Change(e) {
var combo = $("#SubDDL1").data("tComboBox");
combo.value("");
combo.reload();
}
function onSubDDL1DataBinding(e) {
var combo = $("#MainDDL1").data("tComboBox");
e.data = $.extend({}, e.data, { mainDDL1ID: combo.value() });
}
function onMainDDL2Change(e) {
var combo = $("#SubDDL2").data("tComboBox");
combo.value("");
combo.reload();
}
function onSubDDL2DataBinding(e) {
var combo = $("#MainDDL2").data("tComboBox");
e.data = $.extend({}, e.data, { mainDDL2ID: combo.value() });
}
</script>
<table>
<tr>
<td>
@(Html.Telerik().ComboBox()
.Name("MainDDL1")
.AutoFill(true)
.DataBinding(binding => binding.Ajax().Select("LoadMainDDL", "DataSearch"))
.HighlightFirstMatch(true)
.ClientEvents(events => events.OnChange("onMainDDL1Change"))
)
</td>
<td>
@(Html.Telerik().ComboBox()
.Name("MainDDL2")
.AutoFill(true)
.DataBinding(binding => binding.Ajax().Select("LoadMainDDL", "DataSearch"))
.HighlightFirstMatch(true)
.ClientEvents(events => events.OnChange("onMainDDL2Change"))
)
</td>
</tr>
<tr>
<td>
@(Html.Telerik().ComboBox()
.Name("SubDDL1")
.DataBinding(binding => binding.Ajax().Select("LoadSubDDL1", "DataSearch"))
.HighlightFirstMatch(true)
.ClientEvents(events => events.OnDataBinding("onSubDDL1DataBinding"))
)
</td>
<td>
@(Html.Telerik().ComboBox()
.Name("SubDDL2")
.DataBinding(binding => binding.Ajax().Select("LoadSubDDL2", "DataSearch"))
.HighlightFirstMatch(true)
.ClientEvents(events => events.OnDataBinding("onSubDDL2DataBinding"))
)
</td>
</tr>
<tr>
<td>
@Html.TextBox("Search1")
</td>
<td>
@Html.TextBox("Search2")
</td>
</tr>
<tr align="center">
<td colspan="4">
<input type="button" class="t-button button1" value="Search" id="btnSubmit" />
</td>
</tr>
</table>
<div id="result1">
</div>
<div id="result2">
</div>
你试过这个吗?(第二个答案)也许实现一个连接管理器有助于解决并发问题;不过,我一直收到一个Ajax内部服务器错误好的,明白了。很好用。只是忘了重新命名一些东西。我马上把答案贴出来。