C# 如何避免Asp.net MVC4中的回发

C# 如何避免Asp.net MVC4中的回发,c#,javascript,asp.net,asp.net-mvc-4,C#,Javascript,Asp.net,Asp.net Mvc 4,我有一个表单,它将在两个不同的下拉列表中绑定一些值,并保存用户选择的值。现在我使用RequiredIf属性。它也可以正常工作。如果用户没有选择值,它会显示消息,同样,在单击提交按钮后,下拉列表中的某些选定值将变为默认值。由于再次加载操作结果,我需要在用户选择中显示Meesage而不做任何更改 我的模型代码是 > public ObservableCollection<Receipt> GetReceiptList() > { >

我有一个表单,它将在两个不同的下拉列表中绑定一些值,并保存用户选择的值。现在我使用RequiredIf属性。它也可以正常工作。如果用户没有选择值,它会显示消息,同样,在单击提交按钮后,下拉列表中的某些选定值将变为默认值。由于再次加载操作结果,我需要在用户选择中显示Meesage而不做任何更改

我的模型代码是

> public ObservableCollection<Receipt> GetReceiptList()
>         {
>             ObservableCollection<Receipt> ReceiptList = new ObservableCollection<Receipt>();
>             DataTable dtReceipt = new DataTable();
>             dtReceipt = objDAL.ExecuteTable(CommandType.StoredProcedure, "sp_Receipt_Select");
>             foreach (DataRow dr in dtReceipt.Rows)
>             {
>                 ReceiptList.Add(new Receipt
>                 {
>                     Id = Convert.ToInt32(dr["REC_Id_I"]),
>                     Cust_Name = dr["CUS_Name_V"].ToString(),
>                     Pay_Amount = dr["REC_PaidAmount_M"].ToString(),
>                     Pay_Mode = dr["REC_PayMode_C"].ToString(),
>                     Bank_Name = dr["REC_BankName_V"].ToString(),
>                     Bank_Address = dr["REC_BankAddress"].ToString(),
>                     ChequeNo = dr["REC_ChequeNo_V"].ToString(),
>                     Cheque_Date = dr["REC_ChequeDate_D"].ToString(),
>                 });
>             }
>             return ReceiptList;
>         }
公共ObservableCollection GetReceiptList() > { >ObservableCollection ReceiptList=新的ObservableCollection(); >DataTable DTReceive=新DataTable(); >dtreceive=objDAL.ExecuteTable(CommandType.storedProcess,“sp_receive_Select”); >foreach(dtreceive.Rows中的数据行dr) > { >ReceiptList.Add(新收据 > { >Id=转换为32(dr[“REC_Id_I”]), >Cust_Name=dr[“CUS_Name_V”].ToString(), >Pay_Amount=dr[“REC_PaidAmount_M”]。ToString(), >Pay_Mode=dr[“REC_Pay Mode_C”]。ToString(), >Bank_Name=dr[“REC_Bank Name_V”]。ToString(), >银行地址=dr[“REC_BankAddress”]。ToString(), >ChequeNo=dr[“REC_ChequeNo_V”]。ToString(), >支票日期=dr[“REC\u ChequeDate\u D”]。ToString(), > }); > } >返回接收列表; > } 控制代码

//AtLoad
public ActionResult ReceiptMaster(Receipt model)
        {
            ObservableCollection<Receipt> ReceiptList = new ObservableCollection<Receipt>();
            Receipt Receipt = new Models.Receipt();
            ReceiptList = Receipt.GetReceiptList();
            ModelState.Clear();
            Sales sales = new Models.Sales();
            DataTable dtCustomer = new DataTable();
            dtCustomer = sales.GetCustomerList();

            IList<Sales> MyCustList = new List<Sales>();
            foreach (DataRow mydataRow in dtCustomer.Rows)
            {
                MyCustList.Add(new Sales()
                {
                    Cust_Id = Convert.ToInt32(mydataRow["Id"].ToString().Trim()),
                    Cust_Name = mydataRow["Name"].ToString().Trim()
                });
            }
            var CustName = new SelectList(MyCustList, "Id", "Cust_Name");
            ViewData["Cu_Name"] = CustName;
            return View(ReceiptList);
        }



    //TO Insert
[HttpPost]
        public ActionResult ReceiptMaster(Receipt model, string command)
        {
            Receipt Receipt = new Models.Receipt();

            if (command == "Sumbit")
            {
                int Id = 0;
                if (model.Pay_Mode == "C")
                {
                    model.ChequeNo = "";
                    model.Cheque_Date = ("1/1/1753 12:00:00 AM");
                    model.Bank_Name = "";
                    model.Bank_Address = "";
                }

                if (ModelState.IsValid)
                {
                    Id = Receipt.SaveReceipt(model.Id, model.Cust_Id, model.Pay_Amount, model.Pay_Mode, model.Bank_Name, model.Bank_Address, model.ChequeNo, model.Cheque_Date);
                    if (Id > 0)
                    {
                        ViewData["Success"] = "Product was saved successfully.";
                        ViewData["ControlView"] = 1;

                        return RedirectToAction("ReceiptMaster", "Admin");

                    }
                    return RedirectToAction("ReceiptMaster", "Admin");
                }

                ObservableCollection<Receipt> ReceiptList = new ObservableCollection<Receipt>();
                ReceiptList = Receipt.GetReceiptList();
                return View(ReceiptList);
            }

            ObservableCollection<Receipt> ReceiptList1 = new ObservableCollection<Receipt>();
            ReceiptList1 = Receipt.GetReceiptList();
            return View(ReceiptList1);

        }
//AtLoad
public ActionResult ReceiptMaster(接收模型)
{
ObservableCollection ReceiptList=新的ObservableCollection();
收据=新型号。收据();
ReceiptList=Receipt.GetReceiptList();
ModelState.Clear();
销售=新车型。销售();
DataTable dtCustomer=新DataTable();
dtCustomer=sales.GetCustomerList();
IList MyCustList=新列表();
foreach(dtCustomer.Rows中的DataRow mydataRow)
{
MyCustList.Add(新销售额()
{
Cust_Id=Convert.ToInt32(mydataRow[“Id”].ToString().Trim()),
Cust_Name=mydataRow[“Name”].ToString().Trim()
});
}
var CustName=new SelectList(MyCustList,“Id”,“Cust_Name”);
ViewData[“Cu_名称”]=客户名称;
返回视图(接收列表);
}
//插入
[HttpPost]
public ActionResult ReceiptMaster(接收模型,字符串命令)
{
收据=新型号。收据();
如果(命令==“Sumbit”)
{
int Id=0;
如果(型号付款方式==“C”)
{
model.ChequeNo=“”;
支票日期=(“1753年1月1日12:00:00上午”);
model.Bank_Name=“”;
model.Bank_Address=“”;
}
if(ModelState.IsValid)
{
Id=收据.SaveReceipt(model.Id、model.Cust\u Id、model.Pay\u金额、model.Pay\u模式、model.Bank\u名称、model.Bank\u地址、model.ChequeNo、model.check\u日期);
如果(Id>0)
{
ViewData[“成功”]=“产品已成功保存。”;
ViewData[“ControlView”]=1;
返回重定向到操作(“ReceiptMaster”、“Admin”);
}
返回重定向到操作(“ReceiptMaster”、“Admin”);
}
ObservableCollection ReceiptList=新的ObservableCollection();
ReceiptList=Receipt.GetReceiptList();
返回视图(接收列表);
}
ObservableCollection ReceiptList1=新的ObservableCollection();
ReceiptList1=Receipt.GetReceiptList();
返回视图(ReceiptList1);
}
用于在下拉列表中绑定值的脚本

<script type="text/javascript">

    $(document).ready(function () {
        $.post('@Url.Action("SelectCustomerForDropJson", "Admin")', null, function (data) {
            var select = $("#Cust_Id");
            select.empty();
            select.append($('<option/>', { value: '', text: '--Select--' }));
            $.each(data, function (index, Data) {
                select.append($('<option/>', {
                    value: Data.Value,
                    text: Data.Text
                }));
            });
        });
    });
</script>

$(文档).ready(函数(){
$.post('@Url.Action(“SelectCustomerForDropJson”,“Admin”)),null,函数(数据){
变量选择=$(“#客户Id”);
select.empty();
select.append($('',{value:'',text:'--select--'}));
$。每个(数据、函数(索引、数据){
select.append($(''){
value:Data.value,
text:Data.text
}));
});
});
});

我不能100%确定你在问什么,但听起来你需要这样做。

更改
返回重定向操作(“ReceiptMaster”、“Admin”)

return View(model);
在你的行动后

如果您使用了RedirectToAction,那么它将加载HTTP GET方法。所以你的验证信息不见了

只需复制我下面的代码,而不是你的操作后代码

并删除此行:
Receipt Receipt=new Models.Receipt()呼叫模式而不是收据

//TO Insert
[HttpPost]
        public ActionResult ReceiptMaster(Receipt model, string command)
        {


            if (command == "Sumbit")
            {
                int Id = 0;
                if (model.Pay_Mode == "C")
                {
                    model.ChequeNo = "";
                    model.Cheque_Date = ("1/1/1753 12:00:00 AM");
                    model.Bank_Name = "";
                    model.Bank_Address = "";
                }

                if (ModelState.IsValid)
                {
                    Id = Receipt.SaveReceipt(model.Id, model.Cust_Id, model.Pay_Amount, model.Pay_Mode, model.Bank_Name, model.Bank_Address, model.ChequeNo, model.Cheque_Date);
                    if (Id > 0)
                    {
                        ViewData["Success"] = "Product was saved successfully.";
                        ViewData["ControlView"] = 1;
                          ObservableCollection<Receipt> ReceiptList = new              ObservableCollection<Receipt>();
            ReceiptList = Receipt.GetReceiptList();
            return View(ReceiptList);

                    }
                    ObservableCollection<Receipt> ReceiptList = new ObservableCollection<Receipt>();
            ReceiptList = Receipt.GetReceiptList();
            return View(ReceiptList);
                }

                ObservableCollection<Receipt> ReceiptList = new ObservableCollection<Receipt>();
                ReceiptList = Receipt.GetReceiptList();
                return View(ReceiptList);
            }

            ObservableCollection<Receipt> ReceiptList1 = new ObservableCollection<Receipt>();
            ReceiptList1 = Receipt.GetReceiptList();
            return View(ReceiptList1);

        }
在模型类中添加属性,如

ObservableCollection<Receipt> ReceiptList  {get :set;}
observeCollection ReceiptList{get:set;}

下面的代码阻止%100回发,请尝试

您需要使用Json来防止页面中的完全回发。之后,您必须返回到局部视图

例如,

HTML代码:

<input type="text" id="UserName" name="UserName"/>
<input type="button" onclick="ButonClick()" value="Enter"/>
控制器:

public ActionResult MyActionResult(string UserName,MyModel model)
{
var stringView = RenderRazorViewToString("_YourPartialView", model);
return Json(stringView, JsonRequestBehavior.AllowGet);
}
注:

您需要以下代码来呈现json的部分视图

将以下内容也添加到控制器中

public string RenderRazorViewToString(string viewName, object model)
{
ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData,    TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}

先生,这很好…但我使用了相同形式的web网格,因此它会在绑定时显示错误。在哪个数据类型中,我要在modelObservableCollection ReceiptList{get:set;}中分配ReceiptList查看我的答案一次又一次,我会找到任何答案..如何避免在Asp.net MVC4中回发
public ActionResult MyActionResult(string UserName,MyModel model)
{
var stringView = RenderRazorViewToString("_YourPartialView", model);
return Json(stringView, JsonRequestBehavior.AllowGet);
}
public string RenderRazorViewToString(string viewName, object model)
{
ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData,    TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}