怎么进行B页面调A页面的后台方法 5C

B页面上有一个[新增User]的按钮,点击后弹出A列表页面(UserDialog.ascx),A上有一个
[OK] 按钮,点击[OK],将选中的那条数据加入B页面的一张关联表,并显示在B页面上.
我原本是将那个添加保存方法写在A的后台的,现在要求:把A的添加保存方法放在B页面后台,点击A的[OK]按钮,调用已经搬到B的添加保存方法.请问怎么实现这个?

c#
2

8个回答

遵循MVC分层思想,后台方法的调用不应该与页面有任何依赖关系。

0
Luze123654
Luze123654 ....可能描述有问题吧,我这里的页面后台是调用另一层有关数据库的操作的方法. 主要是要把A的ascx.cs里的btnSaveUser_DirectClick 里的东西扔到B页面的aspx.cs 里
一年多之前 回复

这个你采用的框架是什么,正常后台方法和页面的唯一联系就是页面上用访问地址不同的调用而不同,这个和方法放在哪个类上并没有什么关系吧

0
Luze123654
Luze123654 用的是ext.net页面和EntityFrameWork link语句写方法层
一年多之前 回复

可以使用HTML 标签,即套用B页面,具体使用方法可W3school查看

0

iFrame可以实现你的需求。

0

简单的办法iframe,难点的办法用post发送或者请求A到B页面。或者在B页面请求A页面

0

首先不知道你从B页面点《新增》打开A页面是怎么实现的,一般常用的是使用window.open(url)

我假设你使用的window.open打开A页面,A页面窗口其实就是B页面窗口的子窗口,只需要调用父页面方法就行

你的保存方法是写在了B页面,假设是触发save(Obj)

A页面有个《确定》按钮,假设是触发confirm()

你A页面选中列表记录后我不知道你要传递哪些参数到B页面,既然是列表,我估计是你选中那条记录的主键key,或者多个参数param1,param2...

A页面:
function confirm(){
var obj = {key:key,param1:param1,param2:param2};//不管有多少个参数,给它装进json
parant.save(obj);//调用父窗口B页面的save(Obj)方法,同时参数也传递过去
window.close();
}

B页面:
function save(Obj){
var key = Obj.key;//接收参数
var param1 = Obj.param1;
....
//ajax 后台处理
}

0
Luze123654
Luze123654 我这边的弹出页面A是一个用户控件ASCX,B是ASPX,通过下面的代码弹出A的
一年多之前 回复

B页面:




/ext:Button
protected void btnUpsertUser_DirectClick(object sender, Ext.Net.DirectEventArgs e)
{
Ext.Net.Hidden hidTrainingId = (Ext.Net.Hidden)this.UserPortalRoleDialog.FindControl("hidTrainingId");
hidTrainingId.Text = trainingId;

        this.UserPortalRoleDialog.WindowShow();

    }

A页面:







/ext:Button这个按钮执行
public void btnSaveUser_DirectClick(object sender, DirectEventArgs e)
{
if (!string.IsNullOrEmpty(hidTrainingId.Text))
{

            TrainingRegistrationBLL trbll = new TrainingRegistrationBLL(HttpContext.Current.Session["Database"].ToString());

            string json = e.ExtraParams["Values"];
            Application["json"] = json;
            Server.Transfer("TrainingDetail.aspx");
            XmlNode xml = JSON.DeserializeXmlNode("{records:{record:" + json + "}}");

            HttpCookie cookie = HttpContext.Current.Request.Cookies["User_Info"];
            string[] arr = cookie.Value.Split(',');
            List<TrainingRegistration> userportroles = new List<TrainingRegistration>();

            foreach (XmlNode row in xml.SelectNodes("records/record"))
            {
                var userportrole = trbll.GetTrainingRegistrationbyTrainingIdandUserId(Convert.ToInt32(hidTrainingId.Text), Convert.ToInt32(row.SelectSingleNode("Id").InnerXml));
                if (userportrole == null)
                {
                    var obj = new TrainingRegistration();
                    obj.TrainingId = Convert.ToInt32(hidTrainingId.Text);
                    obj.Status = 9;
                    obj.IsDelete = false;
                    obj.UserId = Convert.ToInt32(row.SelectSingleNode("Id").InnerXml);
                    obj.CreatedBy = arr[0];
                    obj.CreatedDate = DateTime.Now;
                    obj.LastModifiedBy = arr[0];
                    obj.LastModifiedDate = DateTime.Now;
                    obj.RegisterDate = DateTime.Now;
                    userportroles.Add(obj);
                }

            }

            trbll.InsertTrainingRegistration(userportroles);

            this.UPRChooserDlg.Hide();

            System.Web.UI.Page p = this.Page;
            Ext.Net.Store StoreUserPortalRole = (Ext.Net.Store)p.FindControl("Store_Training_User");
            StoreUserPortalRole.LoadPage(1);

        }}

0

已经解决了,只不过是用的:把json和hidtrainingid作为参数,在弹窗控件的OK方法里调用主体页面的方法.
虽然这样也行,但是任然希望有大佬能教一下,怎么做到:弹窗选中只拿到json串不调用主体方法,直接把json传递到主体页面上,并在主体
后台接收使用

0
qingtianlong97
Always_MyLoverX 大部分前端框架打开窗口都是IFRAME,window.open或模态窗口底层封装,同时建立类似父子窗口的关系,如果你的主体页面调用的方法是js,AB界面只能通过传参方式通信。后台和前端应该分离,便于维护
一年多之前 回复
qingtianlong97
Always_MyLoverX 大部分前端框架打开窗口都是IFRAME,window.open或模态窗口底层封装,同时建立类似父子窗口的关系,如果你的主体页面调用的方法是js,AB界面只能通过传参方式通信,如果直接写的后台,
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!