You need to specify that @id is an output parameter.
ALTER PROCEDURE [dbo].[Validate_User]
@Username NVARCHAR(50),
@Password NVARCHAR(50)
@id INT OUTPUT
AS
...
In c# you also need to specify that the id is for output, something like this:
SqlParameter outParam = cmd.Parameters.AddWithValue("@id", user_id);
outParam.Direction = ParameterDirection.Output;
After executing you also need to read back the value, something like this:
int return_id = cmd.Parameters["@id"].Value;
Good luck!