0

これは、医師を評価するためのハイブリッド (Web フォームと MVC) .NET Web サイトです。以下は私のGridViewです。ユーザーはラジオ ボタンをクリックして評価できます。評価は Doctor オブジェクトに保持され、Doctor オブジェクトは現在のユーザーの評価と平均的なユーザーの評価を表示できる必要があります。オブジェクトをセッションに保存するにはどうすればよいですか? ログオンはありません。

<asp:ObjectDataSource ID="ObjectDataSourceDoctor" runat="server" DeleteMethod="Remove" InsertMethod="Add" SelectMethod="GetDoctor" TypeName="MidtermApplication.Models.TestApplicationDoctorRepo" UpdateMethod="Update" DataObjectTypeName="MidtermApplication.Models.Doctor">
    </asp:ObjectDataSource>
    <asp:GridView ID="GridViewDoctor" runat="server" DataSourceID="ObjectDataSourceDoctor" AutoGenerateColumns="False" OnSelectedIndexChanged="GridViewDoctor_SelectedIndexChanged">
        <Columns>
            <asp:ImageField DataImageUrlField="DoctorPicture" HeaderText="DoctorPicture">
            </asp:ImageField>            
            <asp:BoundField DataField="DoctorName" HeaderText="DoctorName" SortExpression="DoctorName" />
            <asp:BoundField DataField="DoctorSpecialty" HeaderText="DoctorSpecialty" SortExpression="DoctorSpecialty" />
            <asp:TemplateField HeaderText="Rate Now">
                <ItemTemplate>
                <asp:RadioButton ID="RadioButton1" runat="server" GroupName="RateNow" Text="1"></asp:RadioButton>
                <asp:RadioButton ID="RadioButton2" runat="server" GroupName="RateNow" Text="2"></asp:RadioButton>
                <asp:RadioButton ID="RadioButton3" runat="server" GroupName="RateNow" Text="3"></asp:RadioButton>
                <asp:RadioButton ID="RadioButton4" runat="server" GroupName="RateNow" Text="4"></asp:RadioButton>
                <asp:RadioButton ID="RadioButton5" runat="server" GroupName="RateNow" Text="5"></asp:RadioButton>

            </ItemTemplate>
            </asp:TemplateField>
            <asp:ButtonField AccessibleHeaderText="Save Rating" HeaderText="Save Rating" Text="Save" ButtonType="Button" />
            <asp:CheckBoxField DataField="fave" HeaderText="Favorite" SortExpression="fave" InsertVisible="False" />
        </Columns>
    </asp:GridView>

コードビハインド:

public partial class Rating : System.Web.UI.Page
    {
        TestApplicationDoctorRepo repo;
        Doctor doctors;
        protected List<Doctor> context;
        RateableDoctor DoctorRating = new RateableDoctor();

        protected void Page_Load(object sender, EventArgs e)
        {
            TestApplicationDoctorRepo.InitApp(this);
        }

        protected override void OnLoad(EventArgs e)
        {
            context = (List<Doctor>)Application["doctors"];

            if (context == null)
            {
                context = new TestDoctorRepository().GetDoctor();

                Application.Lock();
                Application["doctors"] = context;
                Application.UnLock();
            }

            base.OnLoad(e);
        }

        protected void SaveRepo()
        {
            Application.Lock();
            Application["doctors"] = context;
            Application.UnLock();
        }
    }
}
4

1 に答える 1

0

STEP 1. 「SubmitRating」ボタンがあるはず

ステップ 2. 以下の OnSubmitRatingHandling... 疑似コードを作成します。

private void OnSubmitRatingHandler(...)
{
    IDictionary<int, int> Ratings = new Dictionary<int,int>();
    for(int i = 0; GridViewDoctor.Rows.Count; i++)
    {
       Label lblDocId = GridViewDoctor.Rows[i].FindControl("lblDoctorId") as Label;
       sTmp = lblDocId.Text;
       DocId = Int32.Parse(sTmp);

       RadioButton rdr1 = GridViewDoctor.Rows[i].FindControl("RadioButton1") as RadioButton;
       ... same for rdr2/3/4/5
       if(rdr1.Checked) { Rating=1; } else if(rdr2.Checked) { Rating=2; } ...
       Ratings.Add(DocId, Rating}
    }
    return;
}

ステップ 3. レーティングをセッションに保存したいのに、ディスク ファイルやデータベースには保存したくない理由がわかりません。ただし、これが必要な場合は、次のようになります。

Session.Add("DoctorRatings", 評価);

ただし、情報を保持したい場合は、ユーザー IP アドレス (ログインしていないため) + セッション変数またはアプリケーション変数の評価 (以下の「UserRating」など) を含むクラスをセッションに追加してみてください。

public class UserRating
{
   public string UserIP = null;
   public IDictionary<int, int> Ratings = null;
}

private void OnSubmitRatingHandler(...)
{
... other stuff...
string clientIp = (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? Request.ServerVariables["REMOTE_ADDR"]).Split(',')[0].Trim();
UserRating UserRating = new UserRating();
UserRating.UserIP = clientIP;
UserRating.Ratings = Ratings;
Session.Add("UserRatings", UserRating);
}
于 2013-12-24T18:42:14.893 に答える