PDA

View Full Version : معادل !Page.IsPostBack در razor pages



davidrobert
پنج شنبه 18 بهمن 1397, 22:49 عصر
سلام و خسته نباشید دوستان کسی میدونه معادل این دستور

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
showinfo();
}
}
در Razor pages چی هستش چیزی روی اینترنت جز if (!ModelState.IsValid) پیدا نکردم که این هم به کارم نیامد من اطلاعات از دیتابیس میخونم و نمایش میدم ولی وقتی اطلاعات رو وارد میکنم و یا انتخاب میکنم نمیخوام آیتم B از لیت انتخاب میکنم وقتی رفرش کردم بره سراغ آیتم A یعنی وقتی رفرش شد دیگه برای نمایش اطلاعات نره دیتابیس همون اول که رفته بسته برای بار دوم دیگه نره باید چی کاری انجام بدم ممنون میشم بنده راهنمایی کنید با تشکر

مهدی کرامتی
جمعه 19 بهمن 1397, 00:10 صبح
1- جسارتا خودتون متنی که نوشتید رو چند بار بخوانید ببینید متوجه می شوید منظور خودتون چیه؟!

2- معادلی برای IsPostBack در Razor و MVC وجود نداره، چون کلا مکانیسم PostBack در MVC وجود نداره.

davidrobert
جمعه 19 بهمن 1397, 01:02 صبح
پس این طوری تو هر فرم لود در Razor تمام کوئری های از دیتابیس صدا زده شده همه شون راه به راه صدا زده میشه

hakim22
جمعه 19 بهمن 1397, 17:07 عصر
باید توجه کنید که Razor Page در واقع از الگوی MVC استفاده میکنه و اصلا هیچ ارتباطی با Web Form و مباحثی مثل PostBack نداره.
فکر میکنم مشکل شما در واقع انتخاب لیست های دوتایی مثل استان و شهرستان هست به این معنی که وقتی یکی عوض شد دومی هم آپدیت بشه.
اینکارها رو باید با جاوا اسکریپت و ajax انجام بدید که روش اصولی و درست اون هست.
البته به زودی با استفاده از Blazor هم میشه چنین مکانیزمهایی رو انجام داد.

soroush10
چهارشنبه 24 بهمن 1397, 22:34 عصر
دوست عزیز شما از Attribute زیر قبل از متدتون استفاده بکنید که بعد از رفرش شدن view مجدد عملیات submit انجام نشه:

[ResponseCache(Duration = 0, NoStore = true)]


البته لازم به ذکر که شما از دو متد get و post باید توی کنترلر استفاده بکنید ، یکی برای نمایش view و دیگری برای انجام عملیات (submit)...

davidrobert
سه شنبه 13 فروردین 1398, 18:40 عصر
سلام و تشکر دوست عزیز بابت جواب به بنده .
بنده از دیتابیس برای نمایش جنسیت و همچنین و نام کشور ها استفاده میکنم. به صورت تصویر زیر
149980
مشاهده میکنید جنسیت و نام کشور نمایان شده ولی وقتی روی دکمه ثبت کلیک میکنم به کل جنسیت و کشور خالی میشه یعنی از دیتابیس فراخونی نمیشه.
149981
که از دستورات زیر برای نمایش استفاده میکنم.


[ResponseCache(Duration = 0, NoStore = true)]
public void OnGet()
{
var sex = tblSex.Select().Select(s => new SelectListItem
{
Value = s.S_ID.ToString(),
Text = s.S_Title
}).ToList();
ViewData["sex"] = sex;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


var Country = tbkCountries.List_Countries().Select(s => new SelectListItem
{
Value = s.C_ID.ToString(),
Text = s.C_Titles
}).ToList();
ViewData["Country"] = Country;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}

مقدار دستوری که داخل دیزان استفاده کردم.

<div class="form-group row" ng-class="{'has-error' : Registers.C_Titles.$touched && Registers.C_Titles.$invalid}">
<label asp-for="Countries.C_Titles" class="col-md-4 col-form-label text-md-right"></label>
<div class="col-md-8">
<select asp-for="Countries" class="form-control" asp-items="@((List<SelectListItem>)ViewData["Country"])"></select>
<span class=" text-danger" ng-show="Registers.C_Titles.$touched && Registers.C_Titles.$invalid">لطفاً کشور را انتخاب فرمائید</span>
</div>
</div>

از این دستورات استفاده کردم بار اول درست نشان میده ولی وقتی روی دکمه میخوره همه چیز میپره یا صفحه رفرش میشه من ایران انتخاب کنم میره روی کشور افغانستان یا خانم انتخاب کنم میره روی آقا جنسیت میخوام هم اطلاعات خالی نشه و هم دستورات وقتی روی دکمه زدم به حالت اول باز نگرده
و یک سوال دیگه چطور میتوانم داخل هر دکمه مربوط به اون دکمه یک رویداد بگم وقتی روی دکمه کلیک کرد بررسی کنه کد ملی اگه طرف ایرانی بود ببینه کد ملی درست یا نه یعنی پیغام بده و دیگه دستورات ادامه نده و اگه ایران نبود مشکل نیست شماره پاسپورتش بده
درست مانند این دستور


pnl_error.Visible = false;
StringBuilder messages = new StringBuilder();
bool isValid = true;
/////////////////////////////////////////////////////////////////////////////////////
if (Txt_R_Name.Text == "")
{
messages.Append(msg.Empty("نام"));
isValid = false;
}
/////////////////////////////////////////////////////////////////////////////////////
if (Txt_R_Last.Text == "")
{
messages.Append(msg.Empty("نام خانوادگی"));
isValid = false;
}
/////////////////////////////////////////////////////////////////////////////////////
if (Txt_R_Father.Text == "")
{
messages.Append(msg.Empty("نام پدر"));
isValid = false;
}

if (!isValid)
{
pnl_error.Visible = true;
ErrorMessage.Text = messages.ToString();
return;
}


روشی هستش جز نمایش مانند آنگولار بعضی از دستورات شرطی مانند بررسی تاریخ تولد که انجام میدم و غیره رو به این صورت بررسی و پیغامی به صفحه اصلی بفرستم برای درست کردن اطلاعات چون قبل از ثبت آپلود تصویر هم دارم.
و همین طور بنده دستورات بررسی تاریخ تولد، کد ملی بررسی سن و بعضی دستورات که دارم باید سمت سی شارپ و به کلاینت پیغام بدم.

davidrobert
پنج شنبه 15 فروردین 1398, 14:34 عصر
دوستان بنده به این سبک از خالی شدن جنسیت و کشور ها از لیست باکس جلوگیری کردم وقتی رو دکمه هم خورد مقدارش خالی نشه.

<div class="form-group row" ng-class="{'has-error' : Registers.S_Title.$touched && Registers.S_Title.$invalid}">
<label asp-for="sex.S_Title" class="col-md-4 col-form-label text-md-right"></label>
<div class="col-md-8">
@{
Tbl_Sex tblSex = new Tbl_Sex();
System.Collections.Generic.List<SelectListItem> sex = tblSex.Select().Select(s => new SelectListItem
{
Value = s.S_ID.ToString(),
Text = s.S_Title
}).ToList();
ViewData["sex"] = sex;
<select asp-for="sex" class="form-control" asp-items="@((List<SelectListItem>) ViewData["sex"])"></select>
@*<select name=”sex” id="Sex" class="form-control">
@foreach (var item in Model.Sexs)
{
<option value="@Html.DisplayFor(modelItem => item.Value)">@Html.DisplayFor(modelItem => item.Text) </option>
}
</select>*@
<span class=" text-danger" ng-show="Registers.S_Title.$touched && Registers.S_Title.$invalid">لطفاً جنسیت را انتخاب فرمائید</span>
}
</div>
</div>

که دستور اصلی سی شارپ داخل محیط دیزان استفاده کردم که این هستش.

Tbl_Sex tblSex = new Tbl_Sex();
System.Collections.Generic.List<SelectListItem> sex = tblSex.Select().Select(s => new SelectListItem
{
Value = s.S_ID.ToString(),
Text = s.S_Title
}).ToList();
ViewData["sex"] = sex;
<select asp-for="sex" class="form-control" asp-items="@((List<SelectListItem>) ViewData["sex"])"></select>

بنده از این دستور استفاده کردم ولی وقتی روی دکمه Submit کلیک میکنم کادر متن ها خالی میشن و دوم نسیت پیش فرض آقای مزارم روی خانم دوباره میشه آقا کشور میزارم ایران و پیش فرض افغانستان دوباره بر میگرده به حالت اول یعنی افغانستان و همین طور کادر متن ها رو خالی میکنه نمیخوام وقتی روی دکمه کلیک شد مقدارش خالی بیشه چیکار باید انجام بیدم

davidrobert
جمعه 16 فروردین 1398, 17:49 عصر
دوستان بنده مشکل مربوط به پریدن اطلاعات بعد کلیک روی دکمه submit که عمل رفرش انجام میشود و این عمل رفرش باعث پریدن اطلاعات میشد رو متوجه شددم مقدار action در Form باعث میشود صفحه رفرش و اطلاعات بپرد که بنده مقدار Action برداشتم درست شد و باعث شد اطلاعات نپره. ولی وقتی آنگولار که از سایت https://cdnjs.com/libraries/angular.js/ فایل آنگولار دانلود و به پروژه اضافه کردم باعث شد در method="POST" عمل رفرش دیگه کامل صورت نگیره یعنی قبل از آنگولار مقدار method="Post" وقتی روی دکمه میخورد به سمت سرور میره دستور و برمیگرده و هیچ اطلاعاتی نمپره و همه ثابت هستش ولی وقتی آنگولار میاد دیگه دستورسی سمت سرور نمیره.
دستور بنده بدون آنگولار درست کار میکنه اطلاعاتی نمیپره ولی با آنگولار دیگه سمت سرور نمیره و نمیدانم چیکار کنم این موضوع و آنگولار هم با فیلم آموزشی کم یاد گرفتم و کامل بلد نیستم.
این دستور تگ نویسی بنده در Razor Pages هستش.

<main class="login-form">
<div class="cotainer" ng-controller="MainCtrl">
<div class="row justify-content-center">
<div class="col-md-5">
<div class="card">
<div class="card-header">ورود</div>
<div class="card-body">
<form method="post" novalidate name="Login">
<div class="form-group row" ng-class="{'has-error' : Login.U_Username.$touched && Login.U_Username.$invalid}">
<label asp-for="users.U_Username" class="col-md-4 col-form-label text-md-right"></label>
<div class="col-md-8">
<input type="text" asp-for="users.U_Username" id="U_Username" class="form-control" name="U_Username" ng-model="users.U_Username" maxlength="50" ng-required="true" autofocus>
<span class=" text-danger" ng-show="Login.U_Username.$touched && Login.U_Username.$invalid">لطفاً نام کاربری را وارد فرمائید</span>
</div>
</div>


<div class="form-group row" ng-class="{'has-error' : Login.U_Password.$touched && Login.U_Password.$invalid}">
<label asp-for="users.U_Password" class="col-md-4 col-form-label text-md-right"></label>
<div class="col-md-8">
<input type="password" asp-for="users.U_Password" id="U_Password" class="form-control" name="U_Password" ng-model="users.U_Password" maxlength="50" ng-required="true" autofocus>
<span class=" text-danger" ng-show="Login.U_Password.$touched && Login.U_Password.$invalid">لطفاً رمز عبور را وارد فرمائید</span>
</div>
</div>
<div class="col-md-12 offset-md-1">
<input type="submit" name="Btn_Loggin" id="Btn_Loggin" value="ورود" class="btn btn-primary" @*ng-disabled="Login.$invalid"*@ />
<a href="#" class="btn btn-link">
بازیابی رمز عبور
</a>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</main>

davidrobert
شنبه 17 فروردین 1398, 09:46 صبح
دوستان بلخره بنده تونستم هم ذخیره رو انجام بدم بدون رفرش یعنی هم آنگولار رو دارم استفاده میکنم و هم دارم دستور مربوط ذخیره رو به صورت خیلی ساده پیش بردم.
و هم وقتی اطلاعات ثبت میکنم اطلاعات از بین نمیره از فرم و ثابت هستش اطلاعات.
دستورات سمت کلاینت با مقدار دستور Ajax

<div id="Result"></div>
<form method="post" name="Registers" data-ajax="true" data-ajax-method="post" data-ajax-complete="Insert">
@Html.AntiForgeryToken()
<section id="tabs" class="project-tab">
<div class="container" ng-controller="MainCtrl">
<div class="row">


<div class="col-md-12">
<nav>
<div class="nav nav-tabs nav-fill" id="nav-tab" role="tablist">
<a class="nav-item nav-link active" id="nav-Info-tab" data-toggle="tab" href="#nav-Info" role="tab" aria-controls="nav-Info" aria-selected="true">مشخصات فردی</a>
<a class="nav-item nav-link" id="nav-Connect-tab" data-toggle="tab" href="#nav-Connect" role="tab" aria-controls="nav-Connect" aria-selected="false">ارتباط</a>
<a class="nav-item nav-link" id="nav-Address-tab" data-toggle="tab" href="#nav-Address" role="tab" aria-controls="nav-Address" aria-selected="false">نشانی</a>
<a class="nav-item nav-link" id="nav-ActiveJob-tab" data-toggle="tab" href="#nav-ActiveJob" role="tab" aria-controls="nav-ActiveJob" aria-selected="false">فعالیت شغلی</a>
<a class="nav-item nav-link" id="nav-Upload-tab" data-toggle="tab" href="#nav-Upload" role="tab" aria-controls="nav-Upload" aria-selected="false">آپلود</a>
</div>
</nav>
<div class="tab-content" id="nav-tabContent">
<div class="tab-pane fade show active" id="nav-Info" role="tabpanel" aria-labelledby="nav-Info-tab">
<!------------------------------------------------------------------------------------------------------------------->
<div class="row justify-content-center">
<div class="col-md-6">
<div class="card border-0">
<div class="card-body">
<!------------------------------------------------------------------------------------------------------------------->
<div class="form-group row" ng-class="{'has-error' : Registers.S_Title.$touched && Registers.S_Title.$invalid}">
<label asp-for="sex.S_Title" class="col-md-4 col-form-label text-md-right"></label>
<div class="col-md-8">
@{
Tbl_Sex tblSex = new Tbl_Sex();
System.Collections.Generic.List<SelectListItem> sex = tblSex.Select().Select(s => new SelectListItem
{
Value = s.S_ID.ToString(),
Text = s.S_Title
}).ToList();
ViewData["sex"] = sex;
<select asp-for="sex" class="form-control" asp-items="@((List<SelectListItem>) ViewData["sex"])"></select>
@*<select name=”sex” id="Sex" class="form-control">
@foreach (var item in Model.Sexs)
{
<option value="@Html.DisplayFor(modelItem => item.Value)">@Html.DisplayFor(modelItem => item.Text) </option>
}
</select>*@
<span class=" text-danger" ng-show="Registers.S_Title.$touched && Registers.S_Title.$invalid">لطفاً جنسیت را انتخاب فرمائید</span>
}
</div>
</div>
<!------------------------------------------------------------------------------------------------------------------->
<div class="form-group row" ng-class="{'has-error' : Registers.R_Name.$touched && Registers.R_Name.$invalid}">
<label asp-for="RegisterSelect.R_Name" class="col-md-4 col-form-label text-md-right"></label>
<div class="col-md-8">
<input type="text" asp-for="RegisterSelect.R_Name" id="R_Name" class="form-control" onkeypress="return checkChar(event, 4);" name="R_Name" ng-model="RegisterSelect.R_Name" maxlength="50" ng-required="true" autofocus>
<span class=" text-danger" ng-show="Registers.R_Name.$touched && Registers.R_Name.$invalid">لطفاً نام را وارد فرمائید</span>
</div>
</div>
<!------------------------------------------------------------------------------------------------------------------->
<div class="form-group row" ng-class="{'has-error' : Registers.R_Last.$touched && Registers.R_Last.$invalid}">
<label asp-for="RegisterSelect.R_Last" class="col-md-4 col-form-label text-md-right"></label>
<div class="col-md-8">
<input type="text" asp-for="RegisterSelect.R_Last" id="R_Last" class="form-control" onkeypress="return checkChar(event, 4);" name="R_Last" ng-model="RegisterSelect.R_Last" maxlength="50" ng-required="true" autofocus>
<span class=" text-danger" ng-show="Registers.R_Last.$touched && Registers.R_Last.$invalid">لطفاً نام خانوادگی را وارد فرمائید</span>
</div>
</div>
<!------------------------------------------------------------------------------------------------------------------->
<div class="form-group row" ng-class="{'has-error' : Registers.R_Father.$touched && Registers.R_Father.$invalid}">
<label asp-for="RegisterSelect.R_Father" class="col-md-4 col-form-label text-md-right"></label>
<div class="col-md-8">
<input type="text" asp-for="RegisterSelect.R_Father" id="R_Father" class="form-control" onkeypress="return checkChar(event, 4);" name="R_Father" ng-model="RegisterSelect.R_Father" maxlength="50" ng-required="true" autofocus>
<span class=" text-danger" ng-show="Registers.R_Father.$touched && Registers.R_Father.$invalid">لطفاً نام پدر را وارد فرمائید</span>
</div>
</div>
<!------------------------------------------------------------------------------------------------------------------->
<div class="form-group row" ng-class="{'has-error' : Registers.C_Titles.$touched && Registers.C_Titles.$invalid}">
<label asp-for="Countries.C_Titles" class="col-md-4 col-form-label text-md-right"></label>
<div class="col-md-8">
@{
Tbl_Countries tblCountries = new Tbl_Countries();
System.Collections.Generic.List<SelectListItem> Country = tblCountries.List_Countries().Select(s => new SelectListItem
{
Value = s.C_ID.ToString(),
Text = s.C_Titles


}).ToList();
ViewData["Country"] = Country;
<select asp-for="Countries" dir="ltr" class="form-control" asp-items="@((List<SelectListItem>) ViewData["Country"])"></select>
@*<select name=”C_Titles” id="C_Titles" class="form-control" dir="ltr">
@foreach (var item in Model.cntry)
{
<option value="@Html.DisplayFor(modelItem => item.Value)" data-thumbnail="../flags/aland_islands.gif" >
@Html.DisplayFor(modelItem => item.Text) </option>
}
</select>*@
<span class=" text-danger" ng-show="Registers.C_Titles.$touched && Registers.C_Titles.$invalid">لطفاً کشور را انتخاب فرمائید</span>
}
</div>
</div>
<!------------------------------------------------------------------------------------------------------------------->
<div class="form-group row" ng-class="{'has-error' : Registers.R_National_Code_Or_Passports.$touched && Registers.R_National_Code_Or_Passports.$invalid}">
<label asp-for="RegisterSelect.R_National_Code_Or_Passports" class="col-md-4 col-form-label text-md-right"></label>
<div class="col-md-8">
<input type="text" asp-for="RegisterSelect.R_National_Code_Or_Passports" id="R_National_Code_Or_Passports" class="form-control" onkeypress="return checkChar(event, 1);" name="R_National_Code_Or_Passports" ng-model="RegisterSelect.R_National_Code_Or_Passports" maxlength="10" ng-required="true" autofocus>
<span class=" text-danger" ng-show="Registers.R_National_Code_Or_Passports.$touched && Registers.R_National_Code_Or_Passports.$invalid">لطفاً کد ملی را وارد فرمائید</span>
</div>
</div>
<!------------------------------------------------------------------------------------------------------------------->
</div>
</div>
</div>
</div>
</div>
<!------------------------------------------------------------------------------------------------------------------->
<div class="tab-pane fade" id="nav-Connect" role="tabpanel" aria-labelledby="nav-Connect-tab">
<!------------------------------------------------------------------------------------------------------------------->
</div>
<!------------------------------------------------------------------------------------------------------------------->
<div class="tab-pane fade" id="nav-Address" role="tabpanel" aria-labelledby="nav-Address-tab">
<!------------------------------------------------------------------------------------------------------------------->




</div>


<div class="tab-pane fade" id="nav-ActiveJob" role="tabpanel" aria-labelledby="nav-ActiveJob-tab">


</div>


<div class="tab-pane fade" id="nav-Upload" role="tabpanel" aria-labelledby="nav-Upload-tab">
<!------------------------------------------------------------------------------------------------------------------->
<div class="row justify-content-center">
<div class="col-md-6">
<div class="card border-0">
<div class="card-body">
<!------------------------------------------------------------------------------------------------------------------->
<div class="form-group row" ng-class="{'has-error' : Registers.S_Title.$touched && Registers.S_Title.$invalid}">
<input type="submit" name="Btn_OK" id="Btn_OK" value="ثبت" class="btn btn-success" @*ng-disabled="Login.$invalid"*@ />

</div>
<!------------------------------------------------------------------------------------------------------------------->
</div>
</div>
</div>
</div>
<!------------------------------------------------------------------------------------------------------------------->
</div>
</div>
</div>
</div>
</div>
</section>
</form>


@section scripts{
<script>
$(function () {
$('#Btn_OK').on('click', function (evt) {
evt.preventDefault();
$.post('', $('form').serialize(), function () {
$('#Result').html("ثبت با موفقعیت صورت گرفت");
});
});
});
</script>
}




مقدار دستور سمت سرور.

[HttpPost]
public void OnPost()
{
hlp.Error(1, 1, 1, this.RegisterSelect.R_Name);
}

nadia92
دوشنبه 26 فروردین 1398, 12:54 عصر
سلام. توصیه میکنم حتما روی نگارش خود کار کنید:اشتباه: