مقدمه
با سلام خدمت تمامی دوستان و علاقه مندان به برنامه نویسی
اینجانب مدت 10 سال است که در زمینه برنامه نویسی به صورت سرگرمی نه به عنوان کار اصلی فعالیت دارم ولی مدتی است که تصمیم گرفته ام رو ی این قضیه جدی تر کار کنم تا شاید بتوانم فیلد کاری خود را از شغل فعلی به کار مورد علاقه خودم یعنی برنامه نویسی تغییر بدم.
در طول این فرآیند هر چند گاهی به مشکلاتی بر میخورم که حتی چند روز برای برطرف کردن آنها تلاش میکنم برای همین تصمیم گرفتم مشکلاتی را که من با زحمت زیاد حل میکنم برای دیگران نیز به اشتراک بگذارم تا همه عزیزان علاقه مند بتوانند استفاده کنن .
هدف وبلاگ بیشتر آموزش نکته های کلیدی و برطرف کردن مشکلات احتمالی در کار با برنامه نویسی است .
امیدوارم که بتوانم کمک کوچکی در بالا بردم اطلاعاتت شما عزیزان باشم.
استخراج داده با Ajax از partialview و قرار دادن آن در المان html
در این مثال وقتی فرم RecordP مخفی می شود تابع Ajax اجرا شده و مقادیر را از جدول خوانده و آن را مجددا به روز می کند.
<script type="text/javascript">
$(document).ready(function () {
$("#RecordP").on("hide.bs.modal", function () {
$.ajax({
type: "GET",
url: '/FBProject/GetAllProjectPartial',
//data: formData,
contentType: false,
processData: false,
dataType: "html",
cache: false,
success: successFunc,
error: errorFunc,
complete: completeFunc
});
function successFunc(data)
{
$('#mainpage').html(data);
}
function errorFunc() { alert("خطا در آپلود فایل"); }
function completeFunc() { $('#loading').remove(); }
});
});
</script>
باند کردن مدل به DropDownList درMVC
کدهای کنترلر برای فرستادن داده های مدل
public ActionResult Create()
{
ViewBag.FBAbnieVahedID = new SelectList(db.FBAbnieVahed, "FBAbnieVahedID", "FBAbnieVahedName");
return View();
}
کدهای view برای نمایش داده ها :
<div class="form-group">
@Html.LabelFor(model => model.FBAbnieVahedID, "واحد", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("FBAbnieVahedID", null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.FBAbnieVahedID, "", new { @class = "text-danger" })
</div>
</div>
پارمتر اول Html.DropDownList که به صورت String می باشد مشخص کننده نام پارامتر ViewBag ی می باشد که داده ها مدل توسط آن ارسال شده است.
@Html.DropDownList("MachBrandID", (SelectList)ViewBag.MyList, "انتخاب کنید", htmlAttributes: new { @class = "form-control" })
ست کردن آی دی برای کنترل
@Html.DropDownList("MachBrandID", null, htmlAttributes: new { @class = "form-control", id = "mbrand" })
مقدار دهی کنترل از طریق آی دی :
$("document").ready(function () {
$('#mbrand').val('@Model.MachBrandID');
});
کد اکشن از کنترلر
public ActionResult addjs()
{
String ss = "$('#opener').click(function () {$('#dialog').dialog('open');});";
return Content(ss);
}
<script type="text/javascript"> @{ Html.RenderAction("addjs", "MachGroup"); } </script>
<script type="text/javascript" src="~/MachGroup/addjs"></script>
پر کردن مدل با stored procedure با EF Entity Framework
کد کامل تابع اجرای این پروسه به صورت زیر است:
public static List<T> GetDataByParametrSP<T>(string SPName, DbContext context ,SqlParameter[] sqlParameter =null)
{
if (SPName == null || context == null)
{
//throw (new NullValueSend("Tabale name or Contex is null"));
throw (new Exception("SPName name or Contex is null"));
}
List<T> result = new List<T>();
string sqlp = " ";
if (sqlParameter!=null)
{
foreach (var item in sqlParameter)
{
sqlp += " " + item.ParameterName;
}
result = context.Database.SqlQuery<T>(SPName+ sqlp, sqlParameter).ToList();
return result;
}
result = context.Database.SqlQuery<T>(SPName).ToList();
return result;
}
پارامترهای این تابع به ترتیب
1- نام stored procedure موجود در دیتابیس
2- شی Context تعریف شده در برنامه برای ارتباط با دیتابیس
3- پارامترهای stored procedure به صورت آرایه این بخش میتواند خالی یا صورت Null ارسال شود یعنی هیچ پارامتری وجود نداشته باشد
فقط به این نکته توجه کنید که تابع به صورت جنریک می باشد و قبل از استفاده باید نوع مدل را به صورت جنریک برای آن مشخص کنید
خروجی این تابع یک لیست از مدل ارسال شده می باشد که توسط stored procedure پر شده است.
مثال
List<city> list =GetDataByParametrSP<city>("GetCity", db);
در مثال بالا یک stored procedure در دیتابیس وجود دارد که لیست شهرها را بر می گرداند.
در این مثال مدل City به صورت جنریک به تابع پاس داده شده و خروجی تابع لیست از مدل شهر ها خواهد بود
public Guid IDUnic { get; set; }
اگه به صورت بالا تعریف شود مقدار Guid به صورت خودکار توسط SQL Server داده می شود.
و اگر به صورت زیر تعریف شود مقدار Guid توسط C# معین می شود.
public Ostan()
{
IDUnic = new Guid();
}
[Key]
public Guid IDUnic { get; set; }
از دستور زیر برای مشخص کردن وضعیت یک رکورد در دیتابیس استفاده می شود:
حالتهای مختلف : حذف شده – اضافه شده – ذخیره نشده – تغییر داده شده – بدون تغییر
db.Entry(personel).State.ToString();
روش انتقال داده بین View و Controller
public ActionResult Index01()
{
ViewData["hh"] = " Hello Godarzi";
return View();
}
برداشت متغییر رشته :
<body class="container">
<div>@ViewData["hh"]</div>
یا
<div>@ViewBag.hh</div>
</body>
namespace MVCView.Models
{
public class Person
{
public int ID { get; set; }
public String FullName { get; set; }
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public ActionResult Index02()
{
Person mPerson = new Person()
{
ID = 12,
FullName ="Salman"
};
ViewBag.myPeron = mPerson;
return View();
}
دریافت :
<h1>@ViewBag.myPeron.ID</h1>
<h1>@ViewBag.myPeron.FullName</h1>
روش دوم دریافت شی :
@{
MVCView.Models.Person Mpeson = ViewBag.myPeron as MVCView.Models.Person;
<h1>-------------------------</h1>
<h3>@Mpeson.ID</h3>
<h3>@Mpeson.FullName</h3>
}
public ActionResult Index03()
{
Person mPerson = new Person()
{
ID = 12,
FullName = "Salman"
};
return View(mPerson);
}
دریافت :
@model MVCView.Models.Person
@{
ViewBag.Title = "Index03";
}
<h2>Index03</h2>
<h1>-------------------------</h1>
<h3>ID : @Model.ID </h3>
<h3>FullName : @Model.FullName</h3>
روش چهارم استفاده از ViewModels : برا ی این کار ابتدا یک پوشه (فضا نام) به نام ViewModels در پروژه ایجاد کرده و کلیه کلاس ها یا متغغیرهایی که نیاز است در View استفاده شود به صورت یک کلاس در آن تعریف میکنیم و آن را برای View ارسال می کنیم :
کلاس مدل برای View
namespace MVCView.ViewMidels
{
public class Factory
{
public String FactoryName { get; set; }
public Person Person { get; set; }
}
}
تعریف اکشن :
public ActionResult Index04()
{
Person mPerson = new Person()
{
ID = 12,
FullName = "Salman"
};
Factory factory = new Factory()
{
FactoryName ="Kia Sport",
Person = mPerson
};
return View(factory);
}
تعریف view
@model MVCView.ViewMidels.Factory
@{
ViewBag.Title = "Index04";
}
<h2>Index04</h2>
<h1>-------------------------</h1>
<h3>Factory : @Model.FactoryName </h3>
<h1>-------------------------</h1>
<h3>ID : @Model.Person.ID </h3>
<h3>FullName : @Model.Person.FullName</h3>
public ActionResult Index05()
{
List<Person> Lperon = new List<Person>()
{
new Person(){ID=1,FullName="Ali"},
new Person(){ID=2,FullName="Hassan"},
new Person(){ID=3,FullName="Salman"},
new Person(){ID=4,FullName="Sepehr"}
};
return View(Lperon);
}
دریافت در View
@model List<MVCView.Models.Person>
@{
ViewBag.Title = "Index05";
}
<h2>Index05</h2>
@{
if(Model.Count!=0)
{
foreach(var pp in Model)
{
<h5>ID: @pp.ID</h5>
<h5>Name: @pp.FullName</h5>
<hr/>
}
}
}
شکل ساده کد آن به صورت زیر می باشد:
SELECT Id, col1, col2, col3, col4
FROM myTable
WHERE (condition1 OR @Param1 IS NULL)
AND (condition2 OR @Param2 IS NULL)
AND (condition3 OR @Param3 IS NULL)
...
AND (conditionN OR @ParamN IS NULL
یه نمونه عملی از اجرای این کد به صورت زیر می باشد:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
CREATE PROCEDURE [dbo].[OMmaghaleViewPrsd]
@rownum int = null ,
@maghaletypeID int = null,
@countstep int = 5
AS
BEGIN
select * from OMmaghaleView
where
(RowCunter between @rownum and @rownum + @countstep or @rownum IS NULL or @rownum=-1) and
(OMmaghaleTypeID= @maghaletypeID or @maghaletypeID =-1 or @maghaletypeID IS NULL )
END
ساخت Pivot Table از طریق SQL Server
نمونه کد به کار رفته برای ساخت به صورت زیر می باشد:
CREATE TABLE yt
(
[Store] int,
[Week] int,
[xCount] int
);
INSERT INTO yt
(
[Store],
[Week], [xCount]
)
VALUES
(102, 1, 96),
(101, 1, 138),
(105, 1, 37),
(109, 1, 59),
(101, 2, 282),
(102, 2, 212),
(105, 2, 78),
(109, 2, 97),
(105, 3, 60),
(102, 3, 123),
(101, 3, 220),
(109, 3, 87);
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(Week)
from yt
group by Week
order by Week
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')
set @query = 'SELECT store,' + @cols + ' from
(
select store, week, xCount
from yt
) x
pivot
(
sum(xCount)
for week in (' + @cols + ')
) p '
execute(@query);
دستور STUFF برای حذف اولین کاما به کار می رود
دستور QUOTENAME برای اضافه کردن براکت به کار می رود.
دستور FOR XML PATH برای تبدیل به یک رشته به کار می رود
دستور کامل به صورت زیر می باشد
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(Hcol)
from TableName
group by Hcol
order by Hcol
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')
set @query = 'SELECT Vcol,' + @cols + ' from
(
select Vcol, Hcol, SummeyCol
from TableName
) x
pivot
(
sum(SummeyCol)
for Hcol in (' + @cols + ')
) p '
execute(@query);
TableName : اسم جدول
Hcol : سطح افقی یا ستونها
Vcol : سطح عمودی یا سطرها
SummeyCol : ستون محاسباتی
فعال کردن Web API هنگام استفاده اجرای برنامه از طریق Startup
برای این کار ابتدا باید پکیج زیر را نصب کنیم
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
سپس کد های زیر را به متد Configuration کلاس Startup اضافه کنیم
[assembly: OwinStartup(typeof(IdentitySample.Startup))]
namespace IdentitySample
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
WebApiConfig.Register(config);
app.UseWebApi(config);
ConfigureAuth(app);
}
}
}
برای این کار رشته زیر را به فایل Web.config اضافه نمایید :
برای ورود با کاربرهای ویندوز از رشته زیر استفاده نمایید :
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.;Initial Catalog=**DataBaseName**;Integrated Security=SSPI" providerName="System.Data.SqlClient" />
</connectionStrings>
برای ورود با کاربر SQL Server از رشته زیر استفاده نمایید:
<connectionStrings>
<add name="sepehr" connectionString="Data Source=.;Initial Catalog=نام دیتابیس;User ID=نام کاربری;Password=پسورد" providerName="system.Data.SqlClient" />
تغییر عنوان هر اکتیویتی در اندروید استودیو
برای این کار باید نام اکتیوتی مورد نظر را پیدا کرده و خاصیت lable را مانند زیر را در مانیفست انجام داد :
<activity android:name=".PersonalForm" android:label="اضافه کردن پرسنل"></activity>
تابع نمایش لودینگ در اندروید استودیو
برای این کار از تابع زیر استفاده نمایید برای نمایش مقدار تابع رو true تنظیم کنید
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
private void showProgress(final
boolean show) {
// On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which
allow
// for very easy animations. If
available, use these APIs to fade-in
// the progress spinner.
if (Build.VERSION.SDK_INT >=
Build.VERSION_CODES.HONEYCOMB_MR2) {
int shortAnimTime =
getResources().getInteger(android.R.integer.config_shortAnimTime);
mLoginFormView.setVisibility(show
? View.GONE : View.VISIBLE);
mLoginFormView.animate().setDuration(shortAnimTime).alpha(
show ? 0 : 1).setListener(new AnimatorListenerAdapter()
{
@Override
public void onAnimationEnd(Animator
animation) {
mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
}
});
mProgressView.setVisibility(show
? View.VISIBLE : View.GONE);
mProgressView.animate().setDuration(shortAnimTime).alpha(
show ? 1 : 0).setListener(new AnimatorListenerAdapter()
{
@Override
public void onAnimationEnd(Animator
animation) {
mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
}
});
} else {
// The ViewPropertyAnimator APIs are not available, so simply show
// and hide the relevant UI
components.
mProgressView.setVisibility(show
? View.VISIBLE : View.GONE);
mLoginFormView.setVisibility(show
? View.GONE : View.VISIBLE);
}
}
تنظیمWEB API برای ایجاد خروجی به صورت JSON
روش اول
برای این کار کدهای زیر را به قسمت Global.asax اضافه نمایید:
GlobalConfiguration.Configuration.Formatters.
JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
GlobalConfiguration.Configuration.Formatters
.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);
روش دوم :
یا اضافه کردن کد زیر به App_Start / WebApiConfig.cs
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
روش نصب پکیج ها ویژال استودیو به صورت آفلاین
برای این کار از دستور زیر در خط دستوری نیوگیت استفاده کنید
Install-Package C:\Path\To\Some\File.nupkg
objWebClient = new WebClient();
objWebClient.Headers[HttpRequestHeader.ContentType] = "application/json ; charset=utf-8";
objWebClient.Encoding = UTF8Encoding.UTF8;